You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot嵌入式Mongo启动失败 MongoClientSettings初始化错误

问题定位

核心报错为java.lang.NoClassDefFoundError: org/bson/codecs/EnumCodecProvider,属于典型的MongoDB相关依赖版本冲突+错误引入废弃组件导致的类缺失问题,具体诱因有三点:

  • 引入的cz.jirutka.spring:embedmongo-spring:1.3.1为2016年就停止维护的废弃组件,会传递引入3.x早期版本的MongoDB Java驱动,该版本自带的bson包不存在EnumCodecProvider类,和Spring Boot 2.6.6默认依赖的4.x版本Mongo驱动完全不兼容。
  • Flapdoodle版本配置错误:spring.mongodb.embedded.version=3.4.6错填为Flapdoodle组件自身版本,该配置项实际用于指定嵌入式启动的MongoDB数据库版本,而非组件版本;同时手动指定的de.flapdoodle.embed:de.flapdoodle.embed.mongo:3.4.6和Spring Boot 2.6.6官方适配的版本不匹配。
  • 依赖传递冲突未处理:废弃组件引入的低版本bson、Mongo驱动包覆盖了Spring Boot官方管控的高版本依赖,导致初始化MongoClientSettings时找不到对应类,触发Bean创建失败的连锁报错。
修复方案

按以下步骤调整配置即可:

  1. 移除pom.xml中废弃的jirutka嵌入式Mongo依赖,删除以下代码块:
<dependency>
    <groupId>cz.jirutka.spring</groupId>
    <artifactId>embedmongo-spring</artifactId>
    <version>1.3.1</version>
</dependency>

Spring Boot 2.6.x已原生支持Flapdoodle嵌入式Mongo的自动配置,无需额外引入该老旧组件。
2. 修正Flapdoodle依赖配置,移除手动指定的版本号,交由Spring Boot父POM统一管理兼容版本,将原有Flapdoodle依赖替换为:

<dependency>
    <groupId>de.flapdoodle.embed</groupId>
    <artifactId>de.flapdoodle.embed.mongo</artifactId>
    <scope>runtime</scope>
</dependency>
  1. 修正application.properties中的嵌入式Mongo版本配置,将spring.mongodb.embedded.version改为实际需要启动的MongoDB数据库版本,推荐使用和驱动兼容的4.0.x稳定版,修正后配置如下:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27018
spring.data.mongodb.database=homecooking-messaging
spring.mongodb.embedded.version=4.0.21
  1. 执行Maven命令清理旧依赖缓存并重新构建:
mvn clean install -U

如果构建后仍存在依赖冲突,可通过IDE的Maven依赖分析工具排查所有引入的bson、mongodb-driver包,将所有3.x版本的旧依赖全部排除即可,正常移除jirutka组件后不会再出现版本覆盖问题。

验证标准

项目启动时日志中出现嵌入式Mongo启动成功提示,无类找不到报错,mongoTemplate、chatMessageRepository等Bean正常初始化完成即为修复成功。

内容的提问来源于stack exchange,提问作者Ignacio Estevo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 00:48:24