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

问题描述

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

解决方法

我正在使用这些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
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...