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

升级Spring Boot2.7.1报IllegalAccessError访问org.bson.BSON异常

问题根因

这个异常是MongoDB生态依赖版本严重不匹配、和Spring Boot 2.7.1内置依赖规则冲突导致的:

  • Spring Boot 2.7.1 官方依赖管理中默认绑定的Spring Data MongoDB版本为3.4.x,匹配的MongoDB Java驱动为4.x系列。手动声明的1.9.1.RELEASE版spring-data-mongodb、3.11.0版mongo-java-driver完全不在官方版本兼容矩阵内,类路径下会同时存在多个版本的bson、mongo核心类。
  • 报错中java.lang.IllegalAccessError: tried to access class org.bson.BSON from class com.mongodb.DBObjectCodec的直接触发原因是:3.x版本mongo驱动的DBObjectCodec类需要访问同包下的org.bson.BSON类,但类加载器加载到了4.x版本的bson包中的BSON类,该类在4.x版本中修改了访问权限,最终触发非法访问错误。
  • Tomcat 7的类加载优先级策略会优先加载Web应用lib目录下的资源,多版本同品类jar包共存时加载顺序不可控,直接导致该问题在部署阶段稳定复现,本地构建时因为IDE类加载顺序差异不会触发报错。
解决方案

按以下顺序操作即可修复:

  1. 删除pom.xml中手动添加的mongo-java-driver、spring-data-mongodb两个依赖,不要手动指定这两个组件的版本,直接引入Spring Boot官方提供的MongoDB starter,由Spring Boot的依赖管理自动对齐兼容版本:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
  1. 排查依赖树,清理所有传递引入的旧版本Mongo相关依赖。在项目根目录执行以下命令输出所有Mongo、bson相关依赖:
mvn dependency:tree | grep -E "mongo|bson"

如果输出结果中存在3.x版本的mongo-java-driver、低于3.4.x版本的spring-data-mongodb、版本号不一致的bson包,在引入对应组件的<dependency>节点下添加<exclusion>规则排除这些旧版本传递依赖。
3. 部署前彻底清理Tomcat 7下的旧部署缓存:删除webapps目录下对应旧war包、war包解压生成的文件夹,清空work目录下的缓存文件,再将重新打包生成的war包放入webapps目录启动。

补充说明:Spring Boot 2.7.x系列最低兼容Servlet 3.1规范,Tomcat 7可以正常运行,如果后续需要升级到Spring Boot 3.x版本,需要将Tomcat升级至8.5及以上版本。

内容的提问来源于stack exchange,提问作者Anish Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 17:45:38