将 Spring Boot 应用程序部署到 AWS Beanstalk

Posted

技术标签:

【中文标题】将 Spring Boot 应用程序部署到 AWS Beanstalk【英文标题】:Deploy Spring Boot app to AWS Beanstalk 【发布时间】:2014-05-03 23:32:57 【问题描述】:

将 Spring Boot 项目(最好是 jar)部署到 AWS Beanstalk 环境的最佳方式是什么。还是我应该将其转换为 WAR 并以这种方式部署?


解决方案:

基本上我做的是这样的:

    创建了一个新类来告诉 Spring Boot 我的应用是一个 Web 应用,并且我需要创建所有必要的配置:

    public class MyBootWebApp extends SpringBootServletInitializer  
    
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)  return
    

    application.sources(MyBootApp.class);

(2) .pom 文件内将包装更改为 war,如下所示:<packaging>war</packaging>

就是这样。

【问题讨论】:

【参考方案1】:

将 Spring Boot 部署到 Beanstalk 的最简单方法是使用 Spring Guide 将您的项目转换为 WAR 文件。然后,您只需将 Beanstalk 应用程序设置为使用 Tomcat 并拖放 WAR 文件。 AWS 负责其余的工作。

编辑:基于 Maksim 所做的事情

第 1 步:

public class MyBootWebApp extends SpringBootServletInitializer 
    @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 
        return application.sources(MyBootApp.class);
    

第 2 步:更改 pom.xml 使用 <packaging>war</packaging>

【讨论】:

基本上我所做的是:(1)创建新类:public class MyBootWebApp extends SpringBootServletInitializer @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) return application.sources(MyBootApp.class); (2) 在 .pom 文件中将包装更改为 war,如下所示:war 就是这样。 这不是真的,看我下面的评论***.com/a/41563745/157591 @PeterSzanto 请记住,这是近 3 年前在 Spring Boot 和 Beanstalk 的早期编写的。现在可能可以将其部署为 jar。【参考方案2】:

您可以使用 Elastic Beanstalk 轻松地将 Spring Boot 应用程序部署为 jar 文件。你甚至不需要官方 Spring Boot 指南中描述的 boxfuse。就这么简单

下载 EB CLI,然后在你的 spring boot 项目文件夹中运行

eb init

对于平台选择选项 2) java

添加到新创建的 .elasticbeanstalk/config.yml 文件中

deploy:
     artifact: target/spring-boot-aws-example-0.0.1-SNAPSHOT.jar

(将 jar 名称更改为匹配的名称)

然后将您的应用程序更改为侦听端口 5000,方法是将其添加到您的 application.properties

server.port=5000

然后做

# Prerequisite : generate deployment artifact
mvn clean install

# Create a load balancing, auto-scaling environment
eb create

我的博客文章中介绍了该过程的全部细节: https://exampledriven.wordpress.com/2017/01/09/spring-boot-aws-elastic-beanstalk-example/

【讨论】:

【参考方案3】:

我对 Beanstalk 的了解并不多,无法确定,但在我看来,Java 容器只支持 WAR。您仍然可以使 WAR 可执行以供本地(和非 Beanstalk)使用(例如,在 gs guide 中)。

【讨论】:

嗨 @Dave Syer,aws 和 Elastic beanstalk 也支持 Jar,请参阅我的以下评论和我的博客文章。【参考方案4】:

将 Spring Boot 项目部署到 AWS Beanstalk,最好在 jar 文件中:

    从 maven pom.xml 将包装更改为“jar” 从 AWS Beanstalk --> 创建一个新的应用程序 在应用程序内部 --> 创建一个新环境 从 Selecting Environment Tier 中选择 --> Web Server Environment 在 web 配置之后 --> 从“平台”必须选择“Java”(在这种情况下不是 Tomcat,因为将提供一个已经包含嵌入式 tomcat 的 jar 文件,AWS Beanstalk 为我们提供了托管服务器在哪里建立了 Linux 操作系统、JVM 和兼容的应用程序,以运行支持我们的应用程序所需的任何东西。如果我们要部署 war 文件,那么必须选择 tomcat) Java 平台还支持部署 'jar' 文件(尽管写成 .zip/.war)

【讨论】:

以上是关于将 Spring Boot 应用程序部署到 AWS Beanstalk的主要内容,如果未能解决你的问题,请参考以下文章

AWS CodePipeline 将 Spring Boot 应用程序部署到 Elastic BeansTalk

如何将 Spring Boot 应用程序战争部署到 AWS Elastic Beanstalk?

无法将 Spring Boot v2 Gradle 应用程序部署到 AWS Beanstalk

当我将 Spring Boot 应用程序部署到 AWS Elastic Beanstalk 并且无法从本地 Spring Boot 连接到 RDS 时出现 502 错误网关

如何运行部署在 AWS 上的 Spring Boot 程序 [关闭]

AWS Beanstalk 中的 Spring Boot 微服务