2023网站seo,做集团网站的,东城区网站排名seo,南京老牌网站建设公司本篇和大家分享的是springboot打包并结合shell脚本命令部署#xff0c;重点在分享一个shell程序启动工具#xff0c;希望能便利工作#xff1b;profiles指定不同环境的配置maven-assembly-plugin打发布压缩包分享shenniu_publish.sh程序启动工具linux上使用shenniu_publish.…本篇和大家分享的是springboot打包并结合shell脚本命令部署重点在分享一个shell程序启动工具希望能便利工作profiles指定不同环境的配置maven-assembly-plugin打发布压缩包分享shenniu_publish.sh程序启动工具linux上使用shenniu_publish.sh启动程序profiles指定不同环境的配置通常一套程序分为了很多个部署环境开发测试uat线上 等我们要想对这些环境区分配置文件可以通过两种方式通过application.yml中编码指定 profile.activeuat 方式指定通过mvn中profiles来区分不同环境对应的配置文件夹人工可以手动在idea勾选生成不同环境的包(推荐)这里我们要讲的是第二种首先在mvn中配置如下内容 node node ${scripts_packageName} ${scripts_bootMain} true node1 node1 ${scripts_packageName} ${scripts_bootMain} node2 node2 ${scripts_packageName} ${scripts_bootMain} 节点粗解id用来指定不同环境配置文件所在的目录如下我这里properties该节点中的节点是可作为参数传递给其他配置文件如我这里的package-name节点值就可以在另外的assembly.xml或者shell脚本文件中通过${package-name}获取到如下activeByDefault指定默认环境配置文件夹maven-assembly-plugin打发布压缩包对于springboot程序打包可以分为jar和war这里是jar包有场景是咋们配置文件或者第三方等依赖包不想放到工程jar中并且把这些文件压缩成一个zip包方便上传到linux此时通过maven-assembly-plugin和maven-jar-plugin就可以做到mvn的配置如 org.apache.maven.plugins maven-jar-plugin 2.6 false true lib/ ${scripts_bootMain} **/*.yml **/*.properties **/*.xml **/*.sh make-a-jar compile jar org.apache.maven.plugins maven-assembly-plugin 2.4 ${project.basedir}/src/main/assembly/assembly.xml make-assembly package single 值得注意的地方如下几点mainClass节点用来指定启动main函数入口类路径如这里的com.sm.EurekaServerApplicationexcludes节点排除主jar包中配置等一些列后缀文件因为我们要包这些配置文件放到主包外面descriptor节点用来指定assembly插件对应的assembly.xml配置文件有了上面mvn配置我们还需要assembly.xml的配置这里提取了结合shell脚本发布程序的配置 ${activeProfile} zip false false ${package-name}-${activeProfile}/lib false ${project.basedir}/src/main/profiles/${activeProfile} ${package-name}-${activeProfile}/conf **/* ${project.basedir}/src/main/scripts **/* 777 777 true ${project.build.directory} ${package-name}-${activeProfile}/ *.jar 重点节点介绍formats节点把配置文件和jar包等压缩成什么文件格式这里可以有ziptar等fileMode节点指定scripts目录下脚本文件(这里是shenniu_publish.sh)在linux上文件权限为777filtered节点脚本中参数变量为pom的profiles中properties的值(该配置是把mvn中属性值映射生成到sh文件中如${package-name})完成上面配置后此时我们可以通过idea上勾选切换不同环境来打zip包如图分享shenniu_publish.sh程序启动工具上面步骤完成了zip格式的发布包我们再分享下启动程序的shell脚本该脚本具有的功能如解压zip启动jar包启动jar包停止对应jar运行重启jar程序目前该shell中封装了两种启动jar命令的方式java -cpjava -jar如图命令格式来看全部的shell代码#!/usr/bin/env bash#可变参数变量languageTypejavac #支持 java,javac,netcore 发布#参数值由pom文件传递baseZipName${package-name}-${activeProfile} #压缩包名称 publish-test.zip的publishpackageName${package-name} #命令启动包名 xx.jar的xxmainclass${boot-main} #java -cp启动时指定main入口类;命令java -cp conf;lib*.jar;${packageName}.jar ${mainclass}#例子# baseZipNamepublish-test #压缩包名称 publish-test.zip的publish# packageNamepublish #命令启动包名 publish.jar的xx#固定变量basePath$(cd dirname $0/; pwd)baseZipPath${basePath}/${baseZipName}.zip #压缩包路径baseDirPath${basePath} #解压部署磁盘路径pid #进程pid#解压function shenniu_unzip(){ echo 解压--------------------------------------------- echo 压缩包路径${baseZipPath} if [ ! find ${baseZipPath} ] then echo 不存在压缩包${baseZipPath} else echo 解压磁盘路径${baseDirPath}/${baseZipName} echo 开始解压... #解压命令 unzip -od ${baseDirPath}/${baseZipName} ${baseZipPath} #设置执行权限 chmod x ${baseDirPath}/${baseZipName}/${packageName} echo 解压完成。 fi}#检测pidfunction getPid(){ echo 检测状态--------------------------------------------- pidps -ef | grep -n ${packageName} | grep -v grep | awk {print $2} if [ ${pid} ] then echo 运行pid${pid} else echo 未运行 fi}#启动程序function start(){ #启动前先停止之前的 stop if [ ${pid} ] then echo 停止程序失败无法启动 else echo 启动程序--------------------------------------------- #选择语言类型 read -p 输入程序类型(java,javac,netcore)下一步按回车键(默认${languageType}) read_languageType if [ ${read_languageType} ] then languageType${read_languageType} fi echo 选择程序类型${languageType} #进入运行包目录 cd ${baseDirPath}/${baseZipName} #分类启动 if [ ${languageType} javac ] then if [ ${mainclass} ] then nohup java -cp conf:lib*.jar:${packageName}.jar ${mainclass} ${baseDirPath}/${packageName}.out 21 #nohup java -cp conf:lib*.jar:${packageName}.jar ${mainclass} /dev/null 21 fi elif [ ${languageType} java ] then nohup java -jar ${baseDirPath}/${baseZipName}/${packageName}.jar /dev/null 21 # java -jar ${baseDirPath}/${baseZipName}/${packageName}.jar elif [ ${languageType} netcore ] then #nohup dotnet run ${baseDirPath}/${baseZipName}/${packageName} /dev/null 21 nohup ${baseDirPath}/${baseZipName}/${packageName} /dev/null 21 fi #查询是否有启动进程 getPid if [ ${pid} ] then echo 已启动 #nohup日志 tail -n 50 -f ${baseDirPath}/${packageName}.out else echo 启动失败 fi fi}#停止程序function stop(){ getPid if [ ${pid} ] then echo 停止程序--------------------------------------------- kill -9 ${pid} getPid if [ ${pid} ] then #stop echo 停止失败 else echo 停止成功 fi fi}#启动时带参数根据参数执行if [ ${#} -ge 1 ] then case ${1} in start) start ;; restart) start ;; stop) stop ;; unzip) #执行解压 shenniu_unzip #执行启动 start ;; *) echo ${1}无任何操作 ;; esacelse echo command如下命令 unzip解压并启动 start启动 stop停止进程 restart重启 示例命令如./shenniu_publish start fi正如上面小节说的shell中的参数 package-nameactiveProfileboot-main 都是由mvn中profiles的properties中提供是可变的参数脚本代码本身不需要人工去修改只需要变的是mvn的参数即可其实在我们生成zip包的时候shell中的参数就被替换了可以看zip中shell文件内容如linux上使用shenniu_publish.sh启动程序把生成的zip上传到linux上通过命令解压unzip -od eureka-server-0.0.1-node eureka-server-0.0.1-node.zip其实shell脚本中包含有解压命令但是我在打包时放在了zip中所以只能通过手动解压了当然可以调整此时进入加压目录如此注这里第一次执行./shenniu_publish.sh脚本时候提示了错误信息是由于我是在windows上编辑的这个脚本其空格等和linux上不一样所以运行会有问题要解决可以使用vim命令在linux把该文件转成linux格式如下命令vim shenniu_publish.shset ffunix:wq执行完后再来运行脚本./shenniu_publish.sh此时有如下提示:此刻我们文件是解压状态因此只需要start命令启动程序即可到这里shenniu_publish.sh脚本使用就完成了只要脚本没有提示错误基本都能启动jar服务其他restart和stop命令也如此执行就行可以去研究下shell代码希望该脚本能给你带来效率和好的学习思路。Java知音专注于Java实用文章推送不容错过来源cnblogs.com/wangrudong003/p/10502043.html