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

Spring Boot REST应用打包为WAR部署到Tomcat后无法运行

Spring Boot WAR部署到Tomcat后API无法访问的解决方案

我帮你排查下问题所在,看起来核心问题是主类继承的类不对,再结合几个配置细节调整就能解决:

1. 修正主类的继承关系

你现在继承的SpringServletContainerInitializer是Servlet规范定义的类,并不是Spring Boot专为外部容器部署提供的初始化类。正确的做法是继承SpringBootServletInitializer,并重写configure方法,这样Spring Boot才能在Tomcat中正确初始化应用上下文:

@SpringBootApplication
public class RmsBackendApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(RmsBackendApplication.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        // 指定Spring Boot应用的主类
        return application.sources(RmsBackendApplication.class);
    }
}

2. 确认pom.xml的关键配置

除了你已经做的,还要确保:

  • 明确指定打包方式为war(如果没加的话):
<packaging>war</packaging>
  • start-class配置正确,指向你的主类全路径
  • spring-boot-starter-tomcat的scope保持为provided,避免和Tomcat自带的Servlet容器冲突

3. 验证访问路径

部署到Tomcat后,应用的上下文路径默认是WAR包的名称(也就是rms-0.0.1-SNAPSHOT),所以你的API访问URL应该是:
http://localhost:8080/rms-0.0.1-SNAPSHOT/schools
你之前写的这个路径是对的,但前提是Spring应用已经正常启动。

4. 检查更详细的启动日志

你提供的Tomcat日志只显示了上下文初始化,但没有Spring Boot的启动日志。建议查看Tomcat的catalina.out文件,或者你的应用日志,确认:

  • Spring Boot是否正常启动(有没有类似Started RmsBackendApplication in X seconds的日志)
  • 有没有Bean初始化失败、依赖缺失等报错信息

如果日志显示Spring没有启动,那大概率是主类继承错误导致的;如果有报错,根据错误信息进一步排查(比如依赖缺失、配置错误)。

最后一步:重新打包部署

修改完主类和配置后,执行mvn clean package重新生成WAR包,再部署到Tomcat,重启Tomcat后测试API访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:35:24