Mongo Java驱动程序版本与Spring框架不匹配

时间:2020-10-09 22:40:38

标签: mongodb spring-data spring-data-mongodb spring-mongodb mongo-java-driver

我有带有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,这会破坏应用程序的构建。任何消除该问题的建议。

1 个答案:

答案 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
}