Spring Boot 项目打包 + Shell 脚本部署实践,太有用了!

本文介绍了如何使用SpringBoot与Maven的profiles功能进行环境配置,配合assembly-plugin打包,以及创建shell脚本shenniu_publish.sh实现程序的自动化部署。详细解释了如何配置Maven和assembly.xml以生成包含不同环境配置的部署包,并展示了启动脚本的使用方法。
摘要由CSDN通过智能技术生成

本篇和大家分享的是 Spring Boot 打包并结合 Shell 脚本命令部署,重点在分享一个shell 程序启动工具,希望能便利工作;

  • profiles指定不同环境的配置

  • maven-assembly-plugin打发布压缩包

  • 分享shenniu_publish.sh程序启动工具

  • linux上使用shenniu_publish.sh启动程序

profiles指定不同环境的配置

通常一套程序分为了很多个部署环境:开发,测试,uat,线上 等,我们要想对这些环境区分配置文件,可以通过两种方式:

  • 通过application.yml中编码指定 profile.active=uat 方式指定

  • 通过mvn中profiles来区分不同环境对应的配置文件夹,人工可以手动在idea勾选生成不同环境的包(推荐)

这里我们要讲的是第二种,首先在mvn中配置如下内容:

3 node

6 node

7 ${scripts_packageName}

8 ${scripts_bootMain}

10 

11 true

12 

13 

14 

15 node1

16 

17 node1

18 ${scripts_packageName}

19 ${scripts_bootMain}

20 

21 

22 

23 node2

24 

25 node2

26 ${scripts_packageName}

27 ${scripts_bootMain}

28 

29 

30 

节点粗解:

id:用来指定不同环境配置文件所在的目录,如下我这里:

img

properties:该节点中的节点是可作为参数传递给其他配置文件,如我这里的package-name节点值就可以在另外的assembly.xml或者shell脚本文件中通过${package-name}获取到,如下:

img

activeByDefault:指定默认环境配置文件夹

maven-assembly-plugin打发布压缩包

对于springboot程序打包,可以分为jar和war,这里是jar包;有场景是咋们配置文件或者第三方等依赖包不想放到工程jar中,并且把这些文件压缩成一个zip包,方便上传到linux;此时通过maven-assembly-plugin和maven-jar-plugin就可以做到,mvn的配置如:

2 org.apache.maven.plugins

3 maven-jar-plugin

4 2.6

7 false

9 true

10 lib/

11 ${scripts_bootMain}

12 

13 

14 

15 

16 **/*.yml

17 **/*.properties

18 **/*.xml

19 **/*.sh

20 

21 

22 

23 

24 make-a-jar

25 compile

26 

27 jar

28 

29 

30 

31 

32

33 

34 org.apache.maven.plugins

35 maven-assembly-plugin

36 2.4

37 

38 

39 

40 

41 ${project.basedir}/src/main/assembly/assembly.xml

42 

43 

44 

45 

46 make-assembly

47 package

48 

49 single

50 

51 

52 

53 

值得注意的地方如下几点:

  • mainClass节点:用来指定启动main函数入口类路径,如这里的:com.sm.EurekaServerApplication

  • excludes节点:排除主jar包中配置等一些列后缀文件,因为我们要包这些配置文件放到主包外面

  • descriptor节点:用来指定assembly插件对应的assembly.xml配置文件

有了上面mvn配置,我们还需要assembly.xml的配置,这里提取了结合shell脚本发布程序的配置:

<assembly xmlns=“http://maven.apache.org/ASSEMBLY/2.0.0” xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd

http://maven.apache.org/ASSEMBLY/2.0.0 ">

${activeProfile}

zip

false

false

p a c k a g e − n a m e − {package-name}- packagename{activeProfile}/lib

false

p r o j e c t . b a s e d i r / s r c / m a i n / p r o f i l e s / {project.basedir}/src/main/profiles/ project.basedir/src/main/profiles/{activeProfile}

p a c k a g e − n a m e − {package-name}- packagename{activeProfile}/conf

**/*

${project.basedir}/src/main/scripts

**/*

777

777

true

${project.build.directory}

p a c k a g e − n a m e − {package-name}- packagename{activeProfile}/

*.jar

重点节点介绍:

  • formats节点:把配置文件和jar包等压缩成什么文件格式,这里可以有:zip,tar等

  • fileMode节点:指定scripts目录下脚本文件(这里是:shenniu_publish.sh)在linux上文件权限为777

  • filtered节点:脚本中参数变量为pom的profiles中properties的值(该配置,是把mvn中属性值映射生成到sh文件中,如:${package-name})

完成上面配置后,此时我们可以通过idea上勾选切换不同环境来打zip包,如图:

img

分享shenniu_publish.sh程序启动工具

上面步骤完成了zip格式的发布包,我们再分享下启动程序的shell脚本,该脚本具有的功能如:

  • 解压zip+启动jar包

  • 启动jar包

  • 停止对应jar运行

  • 重启jar程序

目前该shell中封装了两种启动jar命令的方式:

  • java -cp

  • java -jar

如图命令格式:

img

来看全部的shell代码:

#!/usr/bin/env bash

#可变参数变量

languageType=“javac” #支持 java,javac,netcore 发布

#参数值由pom文件传递

baseZipName=“ p a c k a g e − n a m e − {package-name}- packagename{activeProfile}” #压缩包名称 publish-test.zip的publish

packageName=“${package-name}” #命令启动包名 xx.jar的xx

mainclass="KaTeX parse error: Expected 'EOF', got '#' at position 14: {boot-main}" #̲java -cp启动时,指定m…{packageName}.jar ${mainclass}

#例子

# baseZipName=“publish-test” #压缩包名称 publish-test.zip的publish

# packageName=“publish” #命令启动包名 publish.jar的xx

#固定变量

basePath=$(cd dirname $0/; pwd)

baseZipPath=“ b a s e P a t h / {basePath}/ basePath/{baseZipName}.zip”  #压缩包路径

baseDirPath=“${basePath}” #解压部署磁盘路径

pid= #进程pid

#解压

function shenniu_unzip()

{

echo “解压---------------------------------------------”

echo “压缩包路径:${baseZipPath}”

if [ ! find ${baseZipPath} ]

then

最后

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

更多JVM面试整理:

basePath=$(cd dirname $0/; pwd)

baseZipPath=“ b a s e P a t h / {basePath}/ basePath/{baseZipName}.zip”  #压缩包路径

baseDirPath=“${basePath}” #解压部署磁盘路径

pid= #进程pid

#解压

function shenniu_unzip()

{

echo “解压---------------------------------------------”

echo “压缩包路径:${baseZipPath}”

if [ ! find ${baseZipPath} ]

then

最后

2020年在匆匆忙忙慌慌乱乱中就这么度过了,我们迎来了新一年,互联网的发展如此之快,技术日新月异,更新迭代成为了这个时代的代名词,坚持下来的技术体系会越来越健壮,JVM作为如今是跳槽大厂必备的技能,如果你还没掌握,更别提之后更新的新技术了。

[外链图片转存中…(img-LFojecdr-1714451132419)]

更多JVM面试整理:

[外链图片转存中…(img-gpHFAe8F-1714451132419)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值