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

Spring Boot应用本地正常,部署至AWS ElasticBeanstalk后出现404错误求助

解决Spring Boot WAR包部署到AWS Elastic Beanstalk Tomcat环境的404错误

刚遇到过类似的部署问题,这几个核心点你可以逐一排查,应该能解决你的404问题:

1. 启动类缺少外部Tomcat适配配置

Spring Boot默认使用嵌入式Tomcat,部署到外部Tomcat(比如EBS的Tomcat环境)时,你的启动类必须继承SpringBootServletInitializer并重写configure方法,否则Tomcat无法正确加载Spring应用上下文,导致请求找不到对应的Controller。

修改你的启动类如下:

@SpringBootApplication
public class HelloWorldApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(HelloWorldApplication.class);
    }

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

2. WAR包打包配置需调整

Maven项目:

  • 在pom.xml中明确打包方式为war:
    <packaging>war</packaging>
    
  • 排除嵌入式Tomcat依赖(避免和外部Tomcat版本冲突):
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    

Gradle项目:

  • 启用WAR打包:
    war {
        enabled = true
    }
    
  • 配置Tomcat依赖为编译时提供:
    compileOnly 'org.springframework.boot:spring-boot-starter-tomcat'
    

3. Elastic Beanstalk的上下文路径问题

当你把WAR包部署到EBS的Tomcat环境时,默认会以WAR包的文件名作为上下文路径。比如你的WAR包叫hello-app.war,那正确的访问路径应该是:
http://你的EB域名/hello-app/hello

如果想直接用/hello访问,有两种简单解决方式:

  • 把WAR包重命名为ROOT.war,这样Tomcat会把它作为根应用,上下文路径就是/
  • 在EBS环境配置中自定义Tomcat的上下文路径(不过重命名WAR包是更快捷的方式)

4. 查看Tomcat日志排查启动异常

如果上面的配置都调整后还是404,建议去EBS控制台的Logs选项下载Tomcat的catalina.out日志,查看是否有应用启动失败的报错(比如数据库连接异常、类加载错误等)——如果Spring应用根本没启动起来,自然会返回404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 00:12:49