简介
很多时候,我们以jar包的形式运行springboot后,通常都是以kill -9 jar包pid
来结束运行springboot的。但有时候我们的springboot在停止的时候,需要做一些工作。比如关闭数据库连接池、关闭一些线程池等等操作。这个时候直接使用kill -9
就太暴力了。
这里我们建议使用kill -15
来优雅停机,步骤如下:
一、配置springboot application.properties
springboot关于停机的配置,有立即停机和优雅停机,这里我们通过application.properties来开启优雅停机。代码如下:
# 优雅停机
server.shutdown=graceful
二、通过shell脚本启停springboot
这一步可以参考之前的一篇老文章:linux环境后台运行、重启springboot jar包脚本命令,需要注意的是,这篇老文章是使用kill -9
直接杀死进程的。这里我们使用kill -15
来停止进程。大概的代码如下:
PidArr=`ps -ef|grep blog-v2.jar|grep -v 'color'|grep -v 'grep' |awk '{print $2}'`
for PID in $PidArr; do
if [ $PID -ge 0 ]
then
echo "jar pid is:$PID, ready kill jar"
kill -15 $PID
tail --pid=$PID -f /dev/null
else
echo "jar is not running, ready start it"
fi
done
nohup java -jar blog-v2.jar --spring.profiles.active=server >/dev/null 2>&1 &
#blog-v2.jar是jar包名称
这里有一句shell脚本很重要:tail --pid=$PID -f /dev/null
,这句代码是用于监听pid是否被杀死的,可以阻塞代码执行。因为使用kill -15
后,springboot程序不会立即停止,所以如果不通过监听pid是否存在来阻塞脚本,很有可能你再次重启的时候,老的jar包还没停止,会因为端口占用之类的问题导致重启jar包失败。
不过,需要注意的是这句代码不支持MacOS系统。