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

升级tomcat-embed-core至11.0.3后Spring Boot启动失败,如何解决?

解决Tomcat 11.0.3升级后Spring Boot启动失败的问题

问题原因

Tomcat 11.0.3的JreCompat类通过反射访问java.io.FileSystem.useCanonCaches字段时,触发了JDK17模块系统的权限限制——java.base模块默认不允许未命名模块访问该内部字段,从而抛出InaccessibleObjectException,导致应用启动失败。

解决方案

1. 调整Tomcat版本

  • 回退版本:暂时将tomcat-embed-core回退到11.0.2版本,恢复原有正常运行状态。
  • 升级到修复版本:升级至Tomcat 11.0.4及以上版本(官方已修复该JDK17兼容性问题)。

Maven项目可在pom.xml中指定版本:

<properties>
    <tomcat.version>11.0.4</tomcat.version>
</properties>

2. 添加JVM启动参数

若无法调整Tomcat版本,可通过JVM参数开放模块访问权限:

--add-opens java.base/java.io=ALL-UNNAMED
  • IDE运行:在Run/Debug配置的VM options中添加该参数。
  • 命令行运行:打包后启动时加入参数:
java --add-opens java.base/java.io=ALL-UNNAMED -jar your-application.jar

3. 遵循Spring Boot依赖管理规范

Spring Boot 3.4.2的parent已经内置了经过兼容性测试的Tomcat版本,手动升级Tomcat容易引入版本适配问题。建议优先使用parent管理的依赖版本,避免手动指定Tomcat版本;若需升级,确认目标Tomcat版本与Spring Boot 3.4.2兼容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 09:27:00