Spring Boot应用在Tomcat 10部署成功访问报404问题如何排查
Tomcat 10部署Spring Boot应用返回404问题解决指南
核心根因
Tomcat 10.x基于Jakarta EE 9规范实现,所有原Java EE的javax.*开头的API包名全部重命名为jakarta.*。可在Tomcat 9上正常运行的Spring Boot应用(绝大多数为2.x及更早版本)默认依赖javax.servlet等Java EE规范包,和Tomcat 10的API规范不兼容:应用中的Servlet、Filter、Spring MVC DispatcherServlet等核心请求处理组件无法被Tomcat 10识别加载,所以Tomcat仅会标记应用目录部署成功,不会抛出错误,但实际没有任何请求处理逻辑,所有访问都会返回404。
排查&解决步骤
- 确认Spring Boot版本兼容性
只有Spring Boot 3.x及以上版本原生支持Jakarta EE 9+规范,如果你当前使用的是Spring Boot 2.x及更早版本,优先选择降级Tomcat到9.x系列,无需修改任何业务代码即可正常运行。 - 如需保留Tomcat 10,按以下方案适配:
- 升级Spring Boot到3.x以上版本,依赖会自动替换为
jakarta.*规范版本,同时检查业务代码中所有直接导入javax.servlet.*、javax.annotation.*等Java EE包的代码,全部替换为对应的jakarta.*包路径。 - 若不想升级Spring Boot大版本,可以使用Apache官方提供的迁移工具
org.apache.tomcat:tomcat-jakartaee-migration,在WAR打包阶段自动替换包内所有javax.*引用为jakarta.*,也可解决兼容性问题。
- 升级Spring Boot到3.x以上版本,依赖会自动替换为
- 适配后验证
重新打包WAR包部署到Tomcat 10,查看Catalina日志是否出现Spring Boot启动Banner以及DispatcherServlet initialized相关日志,确认核心组件注册成功后再访问应用路径即可。
内容的提问来源于stack exchange,提问作者Razilein
相关产品推荐
相关产品推荐

