部署微服务– 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,一经查实,立即删除!

相关文章

洛谷P2286 [HNOI2004]宠物收养场

题目描述 凡凡开了一间宠物收养场。收养场提供两种服务&#xff1a;收养被主人遗弃的宠物和让新的主人领养这些宠物。 每个领养者都希望领养到自己满意的宠物&#xff0c;凡凡根据领养者的要求通过他自己发明的一个特殊的公式&#xff0c;得出该领养者希望领养的宠物的特点值a&…

Vue 自定义指令可以实现哪些有用的功能

Vue 有一些很实用的指令 v-show v-if v-text v-html v-bind v-on 可以帮助我们实现很复杂的功能&#xff0c;同时它还开辟了钩子供我们自己实现自定义指令。根据自己平时开发总结了一些可以通过指令实现的功能场景&#xff1a;控制页面元素显示与隐藏&#xff0c;可用作控制权限…

正三角形的外接圆面积

描述给你正三角形的边长&#xff0c;pi3.1415926 ,求正三角形的外接圆面积。 输入只有一组测试数据 第一行输入一个整数n(1<n<1000)表示接下来要输入n个边长m(1.0<m<1000.0)输出输出每个正三角形的外接圆面积&#xff0c;保留两位小数&#xff0c;每个面积单独占一…

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

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

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

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

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

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

MySQL多种安装方式选择

1.rpm包安装方式 rpm包的安装方式非常简单&#xff0c;这里以el6平台下的mysql-5.6.34版本为例&#xff0c;首先&#xff0c;要通过上述搜狐镜像地址下载到如下四个MySQL相关软件安装包。 a.下载安装包 MySQL-client-5.6.34-1.el6.x86_64.rpm MySQL-devel-5.6.34-1.el6.x86_64.…

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 lock

多线程访问同一个变量&#xff0c;不进行同步&#xff0c;会造成结果不一致。这里解决方案有很多&#xff0c;使用原子变量。加锁同步&#xff0c;使用synchronized同步。下面是一个lock demo&#xff0c;后面会分析lock实现原理。lock使用的是公平锁还是非公平锁等 import jav…

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…

Spring MVC 4快速入门Maven原型得到了改进–更多Java 8功能

对于所有有兴趣在没有Spring Boot的情况下快速引导Spring 4应用程序的开发人员&#xff0c;请检查刚刚更新的我的Spring MVC 4 Quickstart Maven原型。 原型已经将Java 8用作目标平台已有一段时间了&#xff0c;但是不支持特定的Java 8功能。 最近的更改带来了Thymeleaf&#x…

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…

easymock教程_EasyMock教程–入门

easymock教程在本文中&#xff0c;我将向您展示EasyMock是什么&#xff0c;以及如何使用它来测试Java应用程序。 为此&#xff0c;我将创建一个简单的Portfolio应用程序&#xff0c;并使用JUnit&#xff06;EasyMock库对其进行测试。 在开始之前&#xff0c;让我们首先了解使用…

python 函数、面向对象

一、函数 1、定义个函数&#xff0c;可以对输入的数据进行排序&#xff0c; 通过参数来决定是正向排序还是反向排序。 number input(请输入一串数字&#xff1a;) number_list list(number) def sort_number(*args, s0): if s 0: number_map map(int,args)result sorted…