Spring和MongoTemplate:java.lang.String com.mongodb.connection.ClusterSettings.getDescription()

Spring和MongoTemplate:java.lang.String com.mongodb.connection.ClusterSettings.getDescription(),java,spring,mongodb,spring-data-mongodb,spring-mongodb,Java,Spring,Mongodb,Spring Data Mongodb,Spring Mongodb,我试图创建一个简单的应用程序,用MongoTemplate处理MongoDB数据库。但是,这种方法: @Bean public MongoTemplate mongoTemplate() throws Exception { MongoTemplate template = new MongoTemplate(mongoClient(), this.mongodbName); return template; } 失败,但出现此异常: E

我试图创建一个简单的应用程序,用MongoTemplate处理MongoDB数据库。但是,这种方法:

    @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和MongoJava驱动程序的不匹配吗?如果是,您能指出要使用的软件包的正确组合吗

如果您需要更多信息,请询问。我很乐意提供

补充:啊,讽刺。。。 我找到了这个

    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中,它已被弃用。

关于版本不匹配的说法似乎是正确的。 将上述软件包的版本更改为以下版本:

    <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>

将解决这个问题。我不能把这篇文章看作是对这个问题的回答。spring data mongodb的3.0.*版似乎与最新的mongo java驱动程序不兼容,反之亦然。我可能错了。

似乎我对版本不匹配的看法是正确的。 将上述软件包的版本更改为以下版本:

    <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>

将解决这个问题。我不能把这篇文章看作是对这个问题的回答。spring data mongodb的3.0.*版似乎与最新的mongo java驱动程序不兼容,反之亦然。我可能错了。

Spring3.x支持MongoDBJava版本4.x。mongo java驱动程序和mongodb驱动程序“uber jars”不再发布,如链接页面所述。在3.x和4.x mongo驱动程序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>

Spring3.x支持MongoDBJava版本4.x。mongo java驱动程序和mongodb驱动程序“uber jars”不再发布,如链接页面所述。在3.x和4.x mongo驱动程序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>

根据stackoverflow规则,赏金在19小时内归你所有。根据stackoverflow规则,赏金在19小时内归你所有