java - 简单的 Spring Boot 不适用于 aws

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

我使用示例默认项目创建了一个弹性benstalk并且工作正常,但是在我上传我的Spring Boot项目之后它不起作用,但在本地主机上工作得很好。 为了更好地检查错误,我做了一个非常简单的 Spring Boot 项目,仅具有 Web 依赖项和一个简单的端点,但尚未工作

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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>demo</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </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>

我只创建这个类

package com.example.demo.Testing;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestingAWS {

    @GetMapping()
    public ResponseEntity<?> sayOk(){
        return new ResponseEntity<>(HttpStatus.OK);
    }
}

和@SpringBootApplication

package com.example.demo;

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication public class DemoApplication {

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

我尝试在 application.properties 中没有配置的情况下运行:

server.port=8080

我使用发动 war

mvn clean install

mvn spring-boot:run 在本地主机上部署并正常工作后,端点返回状态 200

但是我在控制台中给出了这个错误

2018-04-18 16:30:55.468  INFO 19224 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-04-18 16:30:55.469  INFO 19224 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)

并且此应用程序无法在 aws 上运行。错误日志:

https://elasticbeanstalk-us-east-1-770207322946.s3.amazonaws.com/resources/environments/logs/tail/e-vnewtwgp2g/i-0f4edca74953a1e67/TailLogs-1524080692420.out?AWSAccessKeyId=AKIAIOUOORMVUTXOJUHQ&Expires=1524167093&Signature=RILCgkY%2B0pJqEgnHNooejNEa9NU%3D

我放了一个链接,因为它非常大,并且 stackoverflow 说我超出了字符限制

但是在健康方面说服务器没问题

enter image description here

但是如果尝试执行请求,我会收到此错误:

<html>
    <head>
        <title>502 Bad Gateway</title>
    </head>
    <body bgcolor="white">
        <center>
            <h1>502 Bad Gateway</h1>
        </center>
        <hr>
        <center>nginx/1.12.1</center>
    </body>
</html>
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->

最佳答案

这个:

2018-04-18 16:30:55.468  INFO 19224 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2018-04-18 16:30:55.469  INFO 19224 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)

不是一个错误。这意味着 Spring Boot 正在使用端点 /error 注册 Controller 。是 Spring Boot 的默认行为,如所解释的 here :

Spring Boot automatically registers a BasicErrorController bean if you don’t specify any custom implementation in the configuration.

您还可以看到日志级别为 INFO,而不是 ERROR

很可能,Spring Boot 不是错误 502 Bad Gateway 的原因。导致此错误的原因有很多。我建议您创建另一个问题,重点关注您的 AWS 设置。

关于java - 简单的 Spring Boot 不适用于 aws,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49907923/

相关文章:

security - Spring Boot 始终使用最新的 tomcat 版本

java - 禁用 Spring Boot 参数解析

java - Cisco AXL - 执行 SQL 查询,解析响应

java - 面板或按钮未显示在框架上

java - 如何查找方法返回的实例? Java编程

java - 静态方法是否缓存返回值?

amazon-web-services - 使用 boto 连接到 aws - 凭证错误

amazon-web-services - 访问 cloudfront 分发 s3 被拒绝

java - 如何使用java制作mysql数据库

amazon-web-services - KOPS如何在AWS中重新创建主节点?