Spring Boot 项目不同环境打包配置与Shell脚本部署实践,太实用了!

  • 不包括摘要:排除主罐包中配置等一些列后缀文件,因为我们要包这些配置文件放到主包外面

  • 描述符描述符:用于指定程序集插件对应的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} </ id>

<!-打包成一个用于发布的zip文件->

zip </ format>

</ formats>

<!- true:zip中生成一级目录(此处屏蔽,配合脚本需要profiles后缀)->

false </ includeBaseDirectory>

<!-打包进来的zip文件的lib目录->

假</ useProjectArtifact>

$ {package-name} - $ {activeProfile} / lib </ outputDirectory>

false </ unpack>

</ dependencySet>

</ dependencySets>

<!-配置文件打包进zip文件的配置目录->

<目录> $ {project.basedir} / src / main / profiles / $ {activeProfile} </ directory>

$ {package-name} - $ {activeProfile} / conf </ outputDirectory>

** / * </ include>

<!- *。xml </ include>->

<!- *。properties </ include>->

<!- *。yml </ include>->

</ includes>

</ fileSet>

<!-启动脚本打包进zip文件->

<目录> $ {project.basedir} / src / main / scripts </ directory>

</ outputDirectory>

** / * </ include>

</ includes>

<!-文件文件权限为777->

777 </ fileMode>

<!-目录权限为777->

777 </ directoryMode>

<!-脚本中参数变量为pom中的值关键->

true </ filtered>

</ fileSet>

<!-项目编译出来的jar打包进zip文件->

$ {project.build.directory} </ directory>

$ {package-name} - $ { activeProfile } / </ outputDirectory>

*。jar < / include>

</ includes>

</ fileSet>

</ fileSets>

</ assembly>

重点介绍:

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

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

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

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

分享shenniu_publish.sh程序启动工具

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

  • 解压zip +启动jar包

  • 启动jar包

  • 停止对应jar运行

  • 重启jar程序

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

  • java -cp

  • java -jar

如命令格式:

来看全部的shell代码:

#!/ usr / bin / env bash

#可变参数变量

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

#参数值由pom文件传递

baseZipName = “” $ {package-name} - $ {activeProfile} “  #压缩包名称publish-test.zip的

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

mainclass = “” $ {boot-main} “  #java -cp启动时,指定main入口类;命令:java -cp conf; lib \ *。jar; $ {packageName} .jar $ {mainclass}

#例子

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

#packageName =“ publish”。罐子的XX

#固定变量

基本路径= (光盘  ‘ 目录名称  (光盘 `目录名称  (光盘 ‘目录名称  0`/; pwd)

baseZipPath = “” $ {basePath} / $ {baseZipName} .zip“   #压缩包路径

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

pid =  #进程pid

#解压

功能 shenniu_unzip()

{

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

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

如果 [!find  $ {baseZipPath} ]

然后

回显 “不存在压缩包:$ {baseZipPath} ”

else

echo  “解压磁盘路径:$ {baseDirPath} /$ {baseZipName} “

echo  ”开始解压…“

#解压命令

unzip  -od $ {baseDirPath} / $ {baseZipName}  $ {baseZipPath}

#设置执行权限

chmod + x  $ {baseDirPath} / $ {baseZipName} / $ {packageName}

echo  “解压完成。”

fi

}

#检测pid

function  getPid()

{

echo  “检测状态--------------------------- ------------------“

pid =ps -ef | grep -n  $ {packageName}  | grep -v grep | awk  '{print $ 2}'

if  [  $ {pid}  ]

然后

回显 “运行pid:$ {pid} ”

else

echo  “未运行”

fi

}

#启动程序

function  start()

{

#启动前,先停止之前的

stop

if  [  $ {pid}  ]

then

echo  “停止程序失败,无法启动“

else

echo  ”启动程序-------------------------------------------- -“

#选择语言类型

read  -p  ”输入程序类型(java,javac,netcore),继续按回车键(要么:$ {languageType}):“  read_languageType

如果 [  $ {read_languageType}  ]

languageType = $ { read_languageType}

fi

echo  “选择程序类型:$ {languageType} ”

#进入运行包目录

cd  $ {baseDirPath} / $ {baseZipName}

#分类启动

if  [  “ $ {languageType} ”  ==  “ javac”  ]

if  [  $ {mainclass}  ]

然后

nohup java -cp conf:lib \ *。jar:$ {packageName} .jar  $ {mainclass}  > $ {baseDirPath} / $ {packageName} .out 2>&1&

#nohup java -cp conf:lib \ *的.jar:$ {的packageName}的.jar $ {mainclass}>的/ dev / null的2>&1&

音响

的elif  [  “$ {languageType} “  ==  ” java“  ]

然后

nohup java -jar  $ {baseDirPath} / $ {baseZipName} / $ {packageName} .jar> / dev / null 2>&1&

#java -jar $ {baseDirPath} / $ {baseZipName} / $ {packageName} .jar

elif  [  “ $ {languageType} ”  ==  “ netcore”  ]

然后

#nohup dotnet运行$ {baseDirPath} / $ {baseZipName} / $ {packageName}> / dev / null 2 >&1&

nohup  $ {baseDirPath} / $ {baseZipName} / $ {packageName}  > / dev / null 2>&1&

fi

#查询是否有启动进度

getPid

如果 [  $ {PID}  ]

然后

回声 “已启动”

#nohup日志

尾-n 50 -f  $ {baseDirPath} / $ {的packageName} .OUT

别的

回声 “启动失败”

科幻

音响

}

#停止程序

功能 停止()

{

getPid

if  [  $ {pid}  ]

然后

回显 “停止程序------------------------------------- --------“

kill  -9  $ {pid}

getPid

如果 [  $ {pid}  ]

#stop

echo  ”停止失败“

else

echo  “停止成功”

fi

fi

}

#启动时带参数,根据参数执行

if  [  $ {#}  -ge 1]

然后

case  $ {1}  in

“ start”)

start

;;

“ restart”)

开始

;;

“ stop”)

停止

;;

“ unzip”)

#执行解压

shenniu_unzip

#执行启动

start

;;

*)

echo  “ $ {1}无任何操作”

;;

command如下命令:

解压缩:解压并启动

start:启动

stop:停止进程

重启:重启

示例命令如:./ shenniu_publish start

fi

正如上面小节说的,shell中的参数软件包名称,activeProfile,boot-main都是由mvn中profiles的属性中提供,是可变的参数,脚本代码本身不需要人工去修改,只需要变的是mvn的参数即可;其实在我们生成zip包的时候,shell中的参数就被替换了,可以看zip中shell文件内容如:

把生成的zip上传到linux上,通过命令解压:

1解压缩-od eureka-server-0.0.1-node eureka-server-0.0.1-node.zip

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

上面小节说的,shell中的参数软件包名称,activeProfile,boot-main都是由mvn中profiles的属性中提供,是可变的参数,脚本代码本身不需要人工去修改,只需要变的是mvn的参数即可;其实在我们生成zip包的时候,shell中的参数就被替换了,可以看zip中shell文件内容如:

把生成的zip上传到linux上,通过命令解压:

1解压缩-od eureka-server-0.0.1-node eureka-server-0.0.1-node.zip

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

[外链图片转存中…(img-NJRgTmAL-1714450986157)]

[外链图片转存中…(img-4paTiRIQ-1714450986158)]

[外链图片转存中…(img-6z2TK9mM-1714450986158)]

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

  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值