部署微服务– Spring Boot fatjar到Amazon Elastic Beanstalk

最近,我正在研究概念验证的Web应用程序,我想将其部署到公共云以进行快速演示。

我决定使用Amazon,因为我已经有过使用它的经验。 亚马逊提供了几种不同的方式来部署Java Web应用程序。

EC2使我们可以灵活地在机箱上安装和配置任何我们想要的东西。 对于想要控制其应用程序的部署和运行方式的人来说,这是一个非常灵活的解决方案,但是缺点是我们必须自己完成大部分服务器安装和配置以及应用程序部署任务。

Elastic Beanstalk是一项易于使用的服务,可自动处理部署,自动扩展,负载平衡和运行状况监视。 只需单击几下,任何人都可以使用Elastic Beanstalk将Web应用程序部署到Amazon云。

我决定使用快速简便的Elastic Beanstalk选项...

Elastic Beanstalk具有多种部署Java应用程序的方式:

  1. 使用Docker
  2. 将War文件部署到Tomcat服务器
  3. 部署从命令行执行的fatjar

在本文中,我将使用Fatjar来介绍该选项,该Fatjar基本上是一个jar文件,其中捆绑了所有类和jar依赖项。

为了使其在亚马逊上正常工作,必须将jar文件放在一个zip文件中。

创建JAR和ZIP文件

在本文中,我将使用Maven来创建上述的jar和zip文件。 让我们来看一个示例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.kaviddiss</groupId><artifactId>spring-boot-aws-beanstalk</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging>...<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.3.2.RELEASE</version><relativePath /><!-- lookup parent from repository --></parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>...</dependencies><build><finalName>${project.artifactId}</finalName><plugins>...<plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin <plugin><!-- NOTE: We don't need a groupId specification because the group is org.apache.maven.plugins ...which is assumed by default. --><artifactId>maven-assembly-plugin</artifactId><version>2.6</version><executions><execution><id>make-zip</id><!-- this is used for inheritance merges --><phase>package</phase><!-- bind to the packaging phase --><goals><goal>single</goal></goals></execution></executions><configuration><appendAssemblyId>false</appendAssemblyId><descriptors><descriptor>src/assembly/zip.xml</descriptor></descriptors></configuration></plugin></plugins></build>
</project>

该文件基于为http://start.spring.io/上的 Spring Boot Web应用程序生成的pom.xml文件,它包括一些其他更改:

  1. 确保包装标签设置为jar
  2. spring-boot-maven-plugin将负责创建jar文件,包括文件本身内部的所有jar依赖项
  3. 使用src / assembly / zip.xml描述符文件配置maven-assembly-plugin以从jar文件生成zip文件

在pom.xml文件中配置了maven-assembly-plugin之后,我们还需要配置zip.xml描述符,该描述符告诉程序集插件如何构造zip文件本身。

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"><id>zip</id><formats><format>zip</format></formats><includeBaseDirectory>false</includeBaseDirectory><fileSets><fileSet><directory>${project.build.directory}</directory><includes><include>${project.artifactId}.jar</include></includes><outputDirectory>.</outputDirectory></fileSet></fileSets>
</assembly>

正如您在上面看到的,我们将输出配置为zip,这是许多受支持的格式之一。

我们还配置了将jar文件包含在zip文件的顶级目录中。 这是Amazon从命令行运行应用程序所需要的,

使用Spring Boot的示例微服务

为了能够测试Maven配置,我创建了一个简单的Spring Boot Web应用程序(请参见下文)。

应用程序

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@SpringBootApplication
@Controller
public class Application {    @RequestMapping(value = "/hello")   public @ResponseBody String helloWorld() {   return "Hello, World!";   }     public static void main(String[] args) {   SpringApplication.run(Application.class, args);    }
}

这个Application类是Web应用程序的主类,它将是从命令行运行fatjar的入口点

部署到Elastic Beanstalk

如果您尚未注册AWS Elastic Beanstalk,则可以单击以下链接: https : //console.aws.amazon.com/elasticbeanstalk 。

选择Amazon Elastic Beanstalk平台

选择Amazon Elastic Beanstalk平台

进入控制台后,单击“为应用程序创建新环境”。 然后单击“创建Web服务器”,然后在平台下拉列表中选择“ Java”,然后单击“立即启动”。

设置环境变量

设置环境变量

AWS将nginx代理服务器配置为将请求转发到在端口8080上运行的应用程序。为了告诉nginx有关端口8080的信息,请在配置->软件配置中添加一个环境变量,其键和值设置为PORT = 8080。

就是这样。 如果一切顺利,您应该可以在AWS上访问示例Web应用程序!

翻译自: https://www.javacodegeeks.com/2016/03/deploying-microservice-spring-boot-fatjar-amazon-elastic-beanstalk.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354518.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在线答卷系统的前端设计与数据库系统的设计与实现

如果要你实现一个在线的答题系统&#xff0c;你能想到它该具有哪些功能&#xff1f;当我接到这样一个需求的时候&#xff0c;脑海中立马能想到的就是它有录入题库的功能&#xff0c;创建试卷后可以从题库选择试题&#xff0c;并且可以针对试题进行分数的设置和排序。试卷发布后…

jgroups传输消息_使用JGroups进行ElasticMQ消息复制

jgroups传输消息ElasticMQ是一个消息服务器&#xff0c;具有Scala&#xff0c;Java和与Amazon SQS兼容的接口。 它通过跨服务器群集复制消息来支持有保证的消息传递&#xff0c;并通过日志记录实现消息持久性。 消息复制是ElasticMQ的核心功能之一。 但是&#xff0c;如果您看一…

使用 Element 组件搭建在线学习的课程卡片设计

假如我们要做一个在线课程学习的系统&#xff0c;其中我们需要做的一个功能就是课程信息流的一个展示&#xff0c;以等高卡片列表或者瀑布流的方式呈现。首先我们来罗列下这个卡片内应该包括哪些信息点&#xff1a;课程名称课程简介分类信息课程评分等级课程文件课时观看学习人…

12个很棒的Spring数据教程来启动您的数据项目

Spring Data的任务是为数据访问提供一个熟悉且一致的&#xff0c;基于Spring的编程模型&#xff0c;同时仍保留基础数据存储的特​​殊特征。 它使使用数据访问技术&#xff0c;关系和非关系数据库&#xff0c;map-reduce框架以及基于云的数据服务变得容易。 这是一个总括项目…

python多线程编程(3): 使用互斥锁同步线程

问题的提出 上一节的例子中&#xff0c;每个线程互相独立&#xff0c;相互之间没有任何关系。现在假设这样一个例子&#xff1a;有一个全局的计数num&#xff0c;每个线程获取这个全局的计数&#xff0c;根据num进行一些处理&#xff0c;然后将num加1。很容易写出这样的代码&am…

如何防止水印被恶意删除或者隐藏?

继上篇 Vue3 实现网页背景水印功能 我们了解了常见的网页水印功能是如何实现的&#xff0c;懂原理的都知道水印是通过在网页中添加代码绘制 DOM 元素覆盖在原有的网页上而来的&#xff0c;一旦你打开浏览器中的元素审查&#xff0c;可以通过删除元素或者在元素的样式上操作属性…

jmc线程转储_如何分析线程转储– IBM VM

jmc线程转储本文是我们的线程转储分析系列的第4部分&#xff0c;它将为您提供什么是IBM VM的JVM线程转储以及您将找到的不同线程和数据点的概述。 您将看到和学习​​到&#xff0c;IBM VM Thread Dump格式是不同的&#xff0c;但是提供了更多现成的故障排除数据。 在这一点上&…

Java 8:使用交替接口公开的类型安全地图生成器

动态展示您的课程 当我是Java新手时&#xff0c;我记得当时想过应该有一种方法可以删除或隐藏我不想公开的类中的方法。 就像用private方法或类似方法覆盖public方法一样&#xff08;哪种情况是不可能的&#xff0c;也不应该是不可能的&#xff09;。 显然&#xff0c;今天&…

nodejs面试题

1、为什么用Nodejs,它有哪些缺点&#xff1f; 事件驱动&#xff0c;通过闭包很容易实现客户端的生命活期。不用担心多线程&#xff0c;锁&#xff0c;并行计算的问题V8引擎速度非常快对于游戏来说&#xff0c;写一遍游戏逻辑代码&#xff0c;前端后端通用当然Nodejs也有一些缺点…

sts-bundle的使用_使用WS-Trust / STS采样器扩展JMeter

sts-bundle的使用JMeter没有对WS-Security或WS-Trust的任何内置支持&#xff0c;这使我为JMeter开发了此STS采样器–可以在负载测试STS时使任何人的生活变得更好。 首先&#xff0c;您需要拥有Apache JMeter发行版。 我正在使用v2.7。 然后&#xff0c;您可以从此处下载sts.sam…

001_jdk配置

配置JAVA_HOME,CLASSPATH,PATH 其中JAVA_HOME必须的 JAVA_HOMEE:\java\jdk1.8.0_77 CLASSPATH(告诉java程序运行时&#xff0c;你的类或者类库在哪里) .; E:\java\jdk1.8.0_77\lib\dt.jar;E:\java\jdk1.8.0_77\lib\tools.jar;E:\java\jdk1.8.0_77\jre\lib\rt.jar 改成变量 .;%J…

python -- join()

python -- join()pythonjoinos月似当时&#xff0c;人似当时否&#xff1f;总 在 python 中&#xff0c;一共有两个 join 方法&#xff0c;一个是 str.join(),另一个是 os.path.join() &#xff0c;这里只了解前一种 str.join(iterable) 官方文档 Return a string which is the…

Spark数据倾斜解决方案(转)

本文转发自技术世界&#xff0c;原文链接 http://www.jasongj.com/spark/skew/ Spark性能优化之道——解决Spark数据倾斜&#xff08;Data Skew&#xff09;的N种姿势 发表于 2017-02-28 | 更新于 2017-10-17 | 本文结合实例详细阐明了Spark数据倾斜的几种场景以及对应的解…

JavaParser入门:以编程方式分析Java代码

我最喜欢的事情之一是解析代码并对其执行自动操作。 因此&#xff0c;我开始为JavaParser做出贡献&#xff0c;并创建了两个相关项目&#xff1a; java-symbol-solver和Effectivejava 。 作为JavaParser的贡献者&#xff0c;我反复阅读了一些非常类似的问题&#xff0c;这些问…

GoldenGate Logdump基本使用

Logdump是GoldenGate复制软件中附带的一个工具软件&#xff0c;在OGG的目录下可以找到。这个工具主要用于分析OGG生成的队列文件&#xff0c;查找记录、统计队列文件中的数据等。 在OGG安装目录下执行logdump.exe or ./logdump即可进入命令行。 开始查找记录之前&#xff0c;先…

.bam.bai的意义_业务活动监视器(BAM)2.0带来的革命

.bam.bai的意义生产兼具精益和企业价值的中间件是一项艰巨的工作。 它要么不存在&#xff0c;要么需要创新的思维&#xff08;很多&#xff09;&#xff0c;并且需要在实现中反复进行。 业务风险很大&#xff0c;但是如果您做对了&#xff0c;它就会使您领先于其他任何公司。 这…

数据结构和算法之排序五:选择排序

我们上一篇谈到了冒泡排序&#xff0c;其实我也说了&#xff0c;这两个排序方式何其相似&#xff0c;如果掌握了冒泡排序再来进行选择排序的理解我觉得完全没有太大的问题。那么什么叫做选择排序呢&#xff1f;我们可以理解为矮子里面挑高个&#xff0c;比如说呀有一个富翁来到…

Visual Studio Code使用问题

1、打开vscode黑屏 右击vscode快捷方式–>属性–>兼容性—>兼容模式打钩 重启vscode就可以了。 2、vscode终端没有显示路径&#xff0c;不能输入 显示如下图 则关闭VS Code ,右键单击VS Code 图标&#xff0c;选择属性->兼容性&#xff0c;取消勾选 已兼容模式运…

Java社区调查结果:74%的开发人员希望减少详细程度

一个新的JDK增强建议&#xff08;JEP&#xff09;在Java社区中风起云涌&#xff1a;JEP286。该建议建议在Java的未来版本中引入局部变量类型推断&#xff0c;以简化Java应用程序的编写。 在下面的文章中&#xff0c;我们将解释它的含义以及它将如何影响您的代码。 新帖&#…

coherence安装_Oracle Coherence:分布式数据管理

coherence安装本文介绍如何使用Oracle Coherence提供分布式&#xff08;分区&#xff09;数据管理。 在下面的示例应用程序中&#xff0c;创建了一个名为OTV的新集群&#xff0c;并且在该集群的两个成员之间分配了一个名为user-map的缓存对象。 二手技术&#xff1a; JDK 1.6.…