部署Spring Boot应用至GCP Compute Engine VM后调用REST端点遇404错误
排查与解决Tomcat10部署Spring Boot应用404问题
核心原因:Tomcat版本差异导致的Servlet API包名变更
Tomcat 10 是第一个基于 Jakarta EE 9 的版本,所有Servlet相关API的包名从 javax.servlet 改为了 jakarta.servlet,而你的本地Tomcat 8基于Java EE 8(javax.servlet),这是最可能导致部署失败或404的原因。
具体排查与修复步骤
1. 检查Spring Boot版本兼容性
- 如果你用的是 Spring Boot 2.x:它依赖的是
javax.servletAPI,和Tomcat10的jakarta.servlet不兼容,直接部署会导致类加载失败(可能不直接抛出明显错误,但应用无法正常初始化,最终导致端点找不到)。- 解决方式二选一:
- 将VM上的Tomcat降级到9版本(和本地Tomcat8版本兼容性更匹配);
- 升级Spring Boot到3.x版本(需同时将JDK升级到17+,因为Spring Boot3.x要求JDK17及以上)。
- 解决方式二选一:
2. 确认WAR包的访问路径
- 如果你部署的WAR包不是
ROOT.war,访问时需要加上上下文路径:- 比如WAR包名为
pest.war,则访问地址应为http://[VM_IP]:8080/pest/(注意末尾的斜杠); - 若想直接用根路径访问,将WAR包重命名为
ROOT.war后重启Tomcat。
- 比如WAR包名为
3. 查看Tomcat日志定位部署问题
- 登录GCP VM,进入Tomcat的日志目录(通常为
/opt/tomcat/logs/,具体路径依Tomcat安装位置而定):- 查看
catalina.out日志,搜索是否存在ClassNotFoundException(比如找不到javax.servlet.*相关类),这直接说明API包不兼容; - 查看
localhost.log,确认应用是否成功初始化,有无Spring上下文加载失败的报错。
- 查看
4. 验证VM上的Tomcat服务状态
- 在VM上执行命令
curl http://localhost:8080,检查是否能访问Tomcat默认页面:- 如果无法访问,说明Tomcat未启动成功,检查Tomcat服务状态(比如用
systemctl status tomcat,若通过服务管理启动的话); - 如果能访问默认页面,说明Tomcat本身无问题,问题出在应用部署环节。
- 如果无法访问,说明Tomcat未启动成功,检查Tomcat服务状态(比如用
额外注意事项
- 确保你的Spring Boot应用打包为WAR包(而非JAR包),且
PestApplication类正确继承了SpringBootServletInitializer(你的代码已满足此要求); - 检查VM上的Tomcat webapps目录,确认WAR包已被自动解压(若未解压,说明部署失败,日志中必有对应报错)。
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

