Spring с MongoTemplate: java .lang.String com.mongodb.connection.ClusterSettings.getDescription () - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь создать простое приложение, которое обрабатывает базу данных MongoDB с помощью MongoTemplate. Однако этот метод:

    @Bean
    public MongoTemplate mongoTemplate() throws Exception {
        MongoTemplate template = new MongoTemplate(mongoClient(), this.mongodbName);
        return template;
    }

не работает с этим исключением:

Error creating bean with name 'mongoTemplate' defined in class path resource [com/myapp/tryout/repository/config/MongoConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.mongodb.core.MongoTemplate]: Factory method 'mongoTemplate' threw exception; nested exception is java.lang.NoSuchMethodError: 'java.lang.String com.mongodb.connection.ClusterSettings.getDescription()'

pom. xml имеет следующие зависимости:

    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-mongodb</artifactId>
      <version>3.0.1.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>mongo-java-driver</artifactId>
      <version>3.12.5</version>
    </dependency>

Spring версия 5.2 .6. Документация по этому com.mongodb.connection.ClusterSettings сообщает, что данный метод действительно устарел. Более того, посмотрев в классе ClusterSettings, я не могу найти этот метод.

Мой вопрос: это о несовпадении текущих выпусков Spring и mon go - java -driver? Если да, не могли бы вы указать правильную комбинацию пакетов для использования?

Пожалуйста, спросите, если вам нужна дополнительная информация. Я с радостью предоставлю его.

ДОБАВЛЕНО: Ах, ирония ... Я нашел это

    private static Cluster createCluster(final MongoClientSettings settings,
                                         @Nullable final MongoDriverInformation mongoDriverInformation) {
        notNull("settings", settings);
        List<MongoCredential> credentialList = settings.getCredential() != null ? singletonList(settings.getCredential())
                : Collections.<MongoCredential>emptyList();
        return new DefaultClusterFactory().createCluster(settings.getClusterSettings(), settings.getServerSettings(),
                settings.getConnectionPoolSettings(), getStreamFactory(settings, false), getStreamFactory(settings, true), credentialList,
                getCommandListener(settings.getCommandListeners()), settings.getApplicationName(), mongoDriverInformation,
                settings.getCompressorList());
    }

в com.mongodb.client.internal.MongoClientImpl.

И это

    public Cluster createCluster(final ClusterSettings clusterSettings, final ServerSettings serverSettings,
                                 final ConnectionPoolSettings connectionPoolSettings, final StreamFactory streamFactory,
                                 final StreamFactory heartbeatStreamFactory, final List<MongoCredential> credentialList,
                                 final CommandListener commandListener, final String applicationName,
                                 final MongoDriverInformation mongoDriverInformation,
                                 final List<MongoCompressor> compressorList) {

        ClusterId clusterId = new ClusterId(clusterSettings.getDescription());

в com.mongodb.connection.DefaultClusterFactory, который устарел.

Ответы [ 2 ]

2 голосов
/ 23 июня 2020

Spring 3.x поддерживает mongodb java версии 4.x. Mon go - java -driver и mongodb-driver «uber-jars» больше не публикуются, как указано на связанной странице. Между версиями 3.x и 4.x mon go driver java зависимости uber jar были разделены на зависимости ядра и синхронизации / реактивного потока. Мне удалось воспроизвести проблему с версией 3.x. Как только я обновился для исправления зависимостей 4.x проблема исчезла.

Итак, правильные зависимости находятся в следующем порядке

<dependency>
  <groupId>org.springframework.data</groupId>
  <artifactId>spring-data-mongodb</artifactId>
  <version>3.0.1.RELEASE</version>
</dependency>

<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongodb-driver-core</artifactId>
  <version>4.0.4</version>
</dependency>

<dependency>
  <groupId>org.mongodb</groupId>
  <artifactId>mongodb-driver-sync</artifactId>
  <version>4.0.4</version>
</dependency>

https://mongodb.github.io/mongo-java-driver/4.0/upgrading/#upgrading -from-the-3-12 - java -драйвер https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#upgrading .2-3

0 голосов
/ 21 июня 2020

Похоже, я был прав насчет несоответствия версий. Изменение версий упомянутых пакетов на следующие:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>2.2.8.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>3.11.2</version>
    </dependency>

позволит решить проблему. Я не могу отметить этот пост как ответ на вопрос. Похоже, что версия 3.0. * Spring-data-mongodb несовместима с последней версией mon go - java -driver или наоборот. Я могу ошибаться.

...