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

部署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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 11:01:29