java - Spring MVC Hello World 应用程序在 AWS elastic beanstalk 上出现 404 错误,在本地按预期运行

标签 java spring amazon-web-services spring-boot

应用程序在我的 IDE(IntelliJ 社区版)中本地运行良好。我可以运行该应用程序,转到浏览器,输入 localhost:8080,它会显示“Hello World”

在 AWS 上,我转到“软件配置”部分并添加了一个环境变量 SERVER_PORT 并将其设置为 8080。

当系统提示我需要哪种类型的 beanstalk 配置时,我相信我选择了 Tomcat。

这是我的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>2.1.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lizardgizzards</groupId>
    <artifactId>langsite</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>langsite</name>
    <description>Demo project for Spring Boot</description>

    <packaging>war</packaging>

    <properties>
        <java.version>11</java.version>
        <start-class>com.lizardgizzards.langsite.LangsiteApplication</start-class>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </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-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

我找到了this answer并按照那里的指示进行操作,所以现在我的主类(class)如下所示:

package com.lizardgizzards.langsite;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
public class LangsiteApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(LangsiteApplication.class);
    }

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

我会粘贴日志,但这超出了堆栈溢出的字符限制。我在日志输出中按 ctrl+f 并搜索“错误”、“严重”和“致命”,但没有看到任何结果。

有一些警告,例如:

[2019 年 10 月 13 日星期日 18:26:14.321734] [ssl:warn] [pid 3396:tid 139962572781632] AH01873:初始化: session 缓存未配置[提示:SSLSessionCache]

OpenJDK 64 位服务器 VM 警告:忽略选项 MaxPermSize=64m; 8.0 中删除了支持

[Sun Oct 13 18:41:58.389785 2019] [proxy:warn] [pid 4934:tid 140166163138304] [client 178.73.215.171:54277] AH01092:没有 HTTP 0.9 请求(没有主机线)传入请求并保留主机集,强制主机名为 uri/的 ip-172-31-18-139.us-west-1.compute.internal/

2019 年 10 月 13 日 18:36:07.679 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 在生产环境中找不到基于 APR 的 Apache Tomcat native 库,该库可在生产环境中提供最佳性能java.library.path:[/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib]

生成war文件时,我使用以下maven命令:mvn clean install spring-boot:repackage

最佳答案

有点荒谬......但解决方法如下:

我更改了 Java 版本以匹配 AWS 上的 Java 版本:

<java.version>1.8</java.version>

关于java - Spring MVC Hello World 应用程序在 AWS elastic beanstalk 上出现 404 错误,在本地按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58366913/

相关文章:

java - Spring Data 域事件丢失(?)

java - 如何将音频文件发送到android中的服务器?

java - Debug模式在带有 Kotlin 的 IDEA 中停止工作

java - Spring 处理程序映射

web-services - 如何指定 webServiceTemplate 使用哪种版本的 soap?

amazon-web-services - 从作为 API 网关的 Lambda 内部建立数据库连接

java - 将列名作为 PreparedStatement 的输入参数

amazon-web-services - X-Amz-Expires 是否是对 AWS 的请求所需的 header /参数?

amazon-web-services - 在 AWS Application Load Balancer 上使用 Go 时,WebSocket 连接失败并出现 301

java - 我怎样才能让 Spring 上下文保持活力