【发布时间】:2021-01-25 00:21:35
【问题描述】:
我有带有 Mongo Java 驱动程序版本 3.11.2 的 springboot (2.0.4) 应用程序。在将 mongo java 驱动程序的应用程序升级到 4.1.0 版本以使用新的 mongo java 驱动程序的 IAM 身份验证功能时,这些更改与整个 Spring 框架中断。
MongoTemplate Bean 代码:
@Bean
public MongoClient mongoClient() {
ConnectionString connectionString = new ConnectionString(
("mongodb://connectionString:goesHere"));
MongoClient mongoClient = MongoClients.create(connectionString);
return mongoClient;
}
@Bean
public MongoTemplate mongoTemplate(MongoClient mongoClient) {
return new MongoTemplate(mongoClient, mongoDB);
}
依赖关系:
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-sync</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>bson</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver-core</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
</exclusion>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
</exclusion>
<exclusion>
<groupId>org.mongodb</groupId>
<artifactId>mongodb-driver</artifactId>
</exclusion>
</exclusions>
</dependecy>
Mongo Java Driver 4.1.0 的部署错误:
通过工厂方法实例化 Bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.springframework.data.mongodb.core.MongoTemplate]:工厂方法 'mongoTemplate' 抛出异常;嵌套异常是 java.lang.NoSuchMethodError: org.springframework.util.Assert.noNullElements(Ljava/util/Collection;Ljava/lang/String;)V
在调查这个问题时,发现我需要为此添加 sping-core(5.2.5 或更高版本),这反过来又要求其他 spring 依赖项在同一版本上。
这完全违背了使用 spring boot 以简化依赖项管理的目标。 感觉 spring 生态系统已经变得如此复杂,升级 mongo-java-driver 需要将整个应用程序升级到不向后兼容并且会破坏应用程序构建的更新版本的 springboot 的不必要的工作。任何解决此问题的建议。
【问题讨论】:
-
您能详细说明一下您是如何升级驱动版本的吗?仅升级不应该影响 Spring Framework 的依赖版本,但不匹配似乎是这里的问题。另外,请注意,在 Spring Boot 升级(2.0 已经过时且不再受支持)之外升级到新的驱动程序主要版本可能会导致问题本身,因为新的主要版本可能包含重大更改。这是 Spring Boot 无能为力的。建议将 Boot 本身升级到最新版本,以获得对 MongoDB 驱动程序的受控更新。
-
@OliverDrotbohm:我已经用依赖关系的 sn-ps 更新了帖子。
-
这是我在尝试使用 mongo-driver-legacy 而不是 mongo-driver-sync 时发现的另一个问题。缺少类:com.mongodb.util.JSONParseException
标签: mongodb spring-data spring-data-mongodb spring-mongodb mongo-java-driver