You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Spring Boot从2.x升级至3.0.6时MongoDataConfiguration.mongoManagedTypes引发类未找到异常

Spring Boot从2.x升级至3.0.6时MongoDataConfiguration.mongoManagedTypes引发类未找到异常

看起来你在把Spring Boot从2.x升级到3.0.6后,遇到了这个棘手的Mongo相关类加载异常,我来帮你拆解问题并给出可行的解决办法:

问题根因分析

从你提供的堆栈信息来看,最核心的错误是java.lang.ClassNotFoundException: org.springframework.data.mongodb.MongoManagedTypes。这个类是Spring Data MongoDB 4.x版本(对应Spring Boot 3.x生态)才引入的类,出现找不到的情况,基本可以确定是项目中存在依赖版本不匹配或依赖冲突,导致旧版本的Spring Data MongoDB被引入,而旧版本里并没有这个类。

具体解决方案

针对你的pom.xml情况,我整理了几个关键步骤:

  1. 移除Mongo Starter的手动版本指定
    你的pom已经继承了Spring Boot 3.0.6的parent,它已经为所有官方starter依赖管理了正确的对应版本,手动指定版本反而容易引发版本不一致的问题。修改你的Mongo依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
        <!-- 删掉这里的<version>3.0.6</version>,让parent自动管控版本 -->
    </dependency>
    
  2. 检查并统一其他Mongo相关依赖
    如果你的项目中还有直接引入的Spring Data MongoDB相关依赖(比如spring-data-mongodbspring-data-mongodb-core等),务必确保它们的版本和Spring Boot 3.0.6对齐(对应版本为4.0.6)。同样建议不要手动指定版本,依赖parent的依赖管理即可。

  3. 排查并解决依赖冲突
    执行Maven命令排查依赖树:

    mvn dependency:tree
    

    在输出结果中搜索所有包含spring-data-mongodb的条目,确认所有相关依赖的版本都是4.0.x系列。如果发现有旧版本(比如3.x,对应Spring Boot 2.x)的依赖被引入,找到它的上层依赖,通过<exclusions>标签排除掉旧版本:

    <dependency>
        <groupId>引入旧版本的依赖groupId</groupId>
        <artifactId>引入旧版本的依赖artifactId</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.data</groupId>
                <artifactId>spring-data-mongodb</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
  4. 清理并重新构建项目
    执行以下命令清理旧依赖并重新构建,确保正确的依赖被下载和引入:

    mvn clean install
    

补充说明

Spring Boot 3.x和2.x的生态版本对应关系非常关键:Spring Boot 3.x基于Spring Framework 6.x,对应的Spring Data版本是2022.0.x(代号Raj),所有Spring Data相关的依赖都需要升级到这个系列。尽量依赖parent的依赖管理,避免手动指定版本,能大大减少版本兼容问题。

备注:内容来源于stack exchange,提问作者Gaurav

火山引擎 最新活动