部署SpringBoot应用到AWS Elastic Beanstalk时404错误的解决方法
Spring Boot部署到AWS Elastic Beanstalk出现404错误排查
本地运行正常的Spring Boot Web应用,部署到AWS Elastic Beanstalk后访问出现404错误。以下是相关代码、配置及环境信息:
控制器代码
package com.example.springhelloworld; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloWorldController { @RequestMapping("/") public String returnHello(){ return "helloworld"; } }
主类代码
package com.example.springhelloworld; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; @SpringBootApplication public class SpringHelloWorldApplication extends SpringBootServletInitializer{ public static void main(String[] args) { SpringApplication.run(SpringHelloWorldApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(SpringHelloWorldApplication.class); } }
HTML模板(helloworld.html)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Spring App</title> </head> <body> <h3>Welcome to Spring Hello World!</h3> </body> </html>
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>SpringHelloWorld</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>SpringHelloWorld</name> <description>SpringHelloWorld</description> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>3.0.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
项目结构

环境与部署信息
- 本地运行正常,
application.properties设置了server.port=5000 - 通过Maven生成war包,部署到AWS Elastic Beanstalk的Tomcat 8.5平台(Corretto 11运行时)
- 访问应用时出现404错误
排查与解决步骤
1. 版本兼容性问题
Spring Boot 3.0.x要求Java 17及以上,但你配置的maven.compiler.source/target是1.8,同时Elastic Beanstalk使用的是Corretto 11,版本不匹配会导致应用无法正常启动。
- 解决:将
pom.xml中的Java版本改为17,同时确保Elastic Beanstalk使用支持Java 17的平台(比如Tomcat 10.x + Corretto 17),或者降级Spring Boot到2.7.x(兼容Java 8/11)。
2. Tomcat依赖重复配置
pom.xml中重复添加了spring-boot-starter-tomcat依赖,一个无scope,一个是provided,可能导致依赖冲突。
- 解决:移除无scope的
spring-boot-starter-tomcat依赖,只保留<scope>provided</scope>的版本,避免打包时嵌入Tomcat。
3. 应用上下文路径问题
部署到Tomcat时,war包的名称会作为默认上下文路径。比如你的war包是SpringHelloWorld-0.0.1-SNAPSHOT.war,访问路径应该是http://<EB域名>/SpringHelloWorld-0.0.1-SNAPSHOT/而不是根路径。
- 解决:
- 配置
application.properties添加server.servlet.context-path=/,或者 - 在Elastic Beanstalk控制台设置环境属性,添加
SERVER_SERVLET_CONTEXT_PATH=/,或者 - 修改
pom.xml的finalName为ROOT,这样war包部署后会作为Tomcat的根应用:<build> <finalName>ROOT</finalName> <!-- 其他配置不变 --> </build>
- 配置
4. 端口配置冲突
Elastic Beanstalk的Tomcat默认监听8080端口,你在application.properties设置的server.port=5000会被Tomcat忽略(因为war包部署时,端口由容器管理)。
- 解决:移除
application.properties中的server.port=5000配置,让Elastic Beanstalk的Tomcat使用默认端口。
5. 查看日志排查启动问题
登录AWS Elastic Beanstalk控制台,查看应用日志(/var/log/tomcat8/catalina.out或对应版本的日志文件),检查是否有启动异常(比如类加载错误、依赖缺失)。
- 操作:在EB控制台的“日志”选项卡中,下载完整日志包,搜索
ERROR或Exception关键字,定位启动失败原因。
内容的提问来源于stack exchange,提问作者Doldrums
相关产品推荐
相关产品推荐

