spring boot 在linux上部署的几种姿势
本篇将介绍spring boot应用jar包在linux上部署运行的几种姿势。
1.手动敲运行命令
正如大多数人所知道是 spring boot 用spring-boot-maven-plugin 插件打成的jar,只需要采用下面的命令就可以轻松运行
nohup java -jar xxx.jar > /dev/null &
上面的命令注意下有nohup 和 &,他们能够起到以后台运行的作用,当前shell关掉也没关系。
至于那些虚拟机的运行参数以及应用的环境运行配置你得根据实际情形加上,
比如
nohup java -Xmx1024m -Xms512m -jar -Dspring.profiles.active=dev xxx.jar > /dev/null &
在这里更多的虚拟机参数和spring boot参数不再多说,大家可以自行去看文档,依据自己的需求去配置。
至于关闭应用嘛,也简单,但稍微有点麻烦,
1. 采用jps -l 命令查看应用当前的进程的pid
[root@master /]# jps -l
87520 sun.tools.jps.Jps
105558 org.apache.catalina.startup.Bootstrap
9874 org.apache.catalina.startup.Bootstrap
4025 apicenter.jar //找到4025
2.然后 kill -9 4025 就是这么简单暴力
2. 自己制作shell 脚本
手敲命令的方式虽然简单,但是如果加上一些额外参数的话,来来回回部署几次,能不累死你吗!
程序猿都很懒!下面展示下我自己写的脚本,给大家参考下
start.sh
#!/bin/bash
APPNAME=blog-www.jar
pid=`ps -ef |grep $APPNAME |grep -v "grep" |awk '{print $2}'`
if [ $pid ];then
echo "$APPNAME is running and pid=$pid"
else
echo "Start success to start $APPNAME..."
nohup java -jar $APPNAME > /dev/null &
fi
stop.sh
#!/bin/bash
APPNAME=blog-www.jar
pid=`ps -ef |grep $APPNAME|grep -v "grep" |awk '{print $2}'`
if [ $pid ];then
echo "$APPNAME is running and pid=$pid"
kill -9 $pid
if [[ $? -eq 0 ]];then
echo "success to stop $APPNAME"
else
echo "fail to stop $APPNAME"
fi
else
echo "$APPNAME is not running!"
fi
以上有几点要注意的地方
- 启动脚本要跟jar包在同个路径下,停止脚本则不需要
- 脚本的编写都应该在英文状态下
- 启动脚本中需要一些虚拟机额外参数和指定配置参数的话可以自己脑补添上
3.用linux服务方式
这一节讲的最好的当然是在spring boot官方文档的部署章节,可以去看下,我这边纯粹做个记录,方便日后查看不用再去翻文档了。
首页得配置下pom.xml <executable>true</executable>
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <executable>true</executable> </configuration> </plugin>
打包spring boot应用得到jar包,然后你就可以 用 ./xxx.jar 的方式运行了
创建init.d 服务
$ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
- 运行init.d服务
一旦上个步骤操作完,你就能以标准的service 服务命令start,status,stop,restart方式操作了,服务运行所属的进程pid将会写入到/var/run/<appname>/<appname>.pid 文件中,而控制台命令会写入到/var/log/<appname>.log文件中
$ service myapp start