Spring Boot 2.7引入spring-boot-starter-data-mongodb报版本不兼容错误
问题成因
该错误本质是依赖版本与运行环境不匹配导致的:
- 报错中提到的
org/bson/codecs/record/RecordCodecProvider属于MongoDB Java驱动的核心依赖bson包,新增spring-boot-starter-data-mongodb后传递拉取了过高版本的bson包,该版本的类由Java 17编译生成,对应class文件版本61.0。 - 你的运行时环境仅能识别最高59.0版本的class文件,对应JDK版本为Java 15,和pom中配置的Java 1.8存在偏差,但即便将运行环境切换为配置的Java 8(仅支持最高52.0版本class文件),依然无法运行该高版本bson包。
- Spring Boot 2.7.0官方默认管理的MongoDB驱动版本为4.4.x,本身原生兼容Java 8,出现该问题是Maven依赖调解时拉取了超出兼容范围的高版本MongoDB驱动(通常是其他第三方依赖传递引入了高版本bson,或Maven依赖拉取策略导致版本自动升级)。
可行修复方案
按改造成本从低到高排序:
- 方案1:显式锁定兼容版本(推荐,无需调整现有JDK和Spring Boot版本)
在pom.xml的<properties>节点中添加配置,强制锁定MongoDB驱动版本为Spring Boot 2.7.x兼容的4.4.x版本:
<properties> <java.version>1.8</java.version> <!-- 锁定MongoDB驱动版本,兼容Java 8运行环境 --> <mongodb.version>4.4.2</mongodb.version> </properties>
配置完成后执行mvn clean install -U强制更新本地依赖,再启动应用即可。
- 方案2:排查排除冲突依赖
执行命令mvn dependency:tree输出全量依赖树,搜索定位到引入高版本org.mongodb:bson的依赖项,在对应依赖配置中添加排除规则,让Maven使用Spring Boot官方管理的兼容版本:
<dependency> <groupId>对应引入高版本bson的依赖groupId</groupId> <artifactId>对应引入高版本bson的依赖artifactId</artifactId> <exclusions> <exclusion> <groupId>org.mongodb</groupId> <artifactId>bson</artifactId> </exclusion> </exclusions> </dependency>
- 方案3:升级运行环境到Java 17
如果项目允许升级JDK版本,可将运行时JDK切换为Java 17,同时将pom中<java.version>配置修改为17,即可直接兼容高版本MongoDB驱动。注意Spring Boot 2.7.x本身支持Java 17,升级前需确认项目中其他第三方依赖都兼容Java 17。
额外说明:当前报错显示你的实际运行JDK版本为Java 15,和pom中配置的Java 1.8不一致,修复依赖问题后建议同步检查IDE启动配置、服务部署脚本中的JDK版本,和项目配置保持一致,避免后续出现其他版本兼容问题。
内容的提问来源于stack exchange,提问作者Surapaneni Harsha
相关产品推荐
相关产品推荐

