我有带有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驱动程序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,这会破坏应用程序的构建。任何消除该问题的建议。
答案 0 :(得分:0)
我正在使用这些pom,您可以尝试使用mongo-3.8.2和spring-data:1.10.0 。确保您没有丢失“ spring-data-commons-core jar”
private fun getCustomTabsPackage(context: Context): String? {
val packageManager: PackageManager = context.packageManager
val activityIntent = Intent(Intent.ACTION_VIEW, Uri.parse("http://"))
val resolvedActivityList: List<ResolveInfo> = packageManager.queryIntentActivities(activityIntent, 0)
return resolvedActivityList
.firstOrNull {
val serviceIntent = Intent()
serviceIntent.action = CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION
serviceIntent.setPackage(it.activityInfo.packageName)
packageManager.resolveService(serviceIntent, 0) != null
}
?.activityInfo
?.packageName
}