【问题标题】:Mongo java driver upgrade from 3.12.1 to 4.2.3 throwing method/class not found execptions on deploymentMongo java 驱动程序从 3.12.1 升级到 4.2.3 抛出方法/类未找到部署时的异常
【发布时间】:2022-01-06 15:37:14
【问题描述】:

我有基于mongo server 4.2的java应用,组件版本如下

spring-boot 2.2.5.RELEASE
spring-data-mongodb2.2.5.RELEASE
mongo-java-driver3.12.1

我将 Spring Boot 更新为 2.5.8,因此对更新依赖项进行了一些更改,如下所示

spring-boot2.5.8
spring-starter-parent2.5.8
spring-data-mongodb 3.2.3
mongodb-driver-core 4.2.3

<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-mongodb</artifactId>
    <version>3.2.3</version>
</dependency>

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-core</artifactId>
    <version>4.2.3</version>
</dependency>

<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.2.3</version>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.5.8</version>
</dependency>

因为我用的是新加的

**import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;**

即使用 mongo-java 驱动程序 3.12.1 的现代 API 我更新到 mongodb-driver-sync 4.2.3

我解决了所有编译错误,但在部署时出现错误,例如 getSrvHost() 找不到方法,进一步调试发现 mongo-java-driver 3.3.0 的旧依赖项> 已经存在于项目中

我排除了依赖和上述问题现在已解决,不存在旧依赖,但在不使用旧 API 方法的情况下仍然出现以下错误

java.lang.NoClassDefFoundError: com/mongodb/MongoClient
Caused by: java.lang.NoClassDefFoundError: com/mongodb/MongoClient

在驱动和spring升级过程中完全卡在这一点上,在整个项目中没有使用com.mongodb.MongoClient,它会在部署时抛出错误。

【问题讨论】:

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


    【解决方案1】:

    建议使用spring-boot-starter-parent 作为&lt;parent&gt; 使用兼容版本。

    只需添加 spring-boot-starter-data-mongodb 依赖项,它就拥有所有必要的 MongoDB 驱动程序。
    pom.xml移除:spring-data-mongodbmongodb-driver-corespring-starter-parent

    注意:始终使用最新版本,因为2.5.8 具有3 vulnerabilities

    pom.xml

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.2</version>
        <relativePath/>
    </parent>
    
    ...
    <dependencies>
        ...
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
    
    </dependencies>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2017-08-02
      • 1970-01-01
      • 2017-10-11
      • 1970-01-01
      • 1970-01-01
      • 2022-09-24
      相关资源
      最近更新 更多