linux环境下实现springboot优雅停机

作者: ʘᴗʘ发布时间:2023-01-30 18:33 浏览量:194 点赞:161 售价:0

简介

很多时候,我们以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系统。

版权声明:《linux环境下实现springboot优雅停机》为CoderBBB作者「ʘᴗʘ」的原创文章,转载请附上原文出处链接及本声明。

原文链接:https://www.coderbbb.com/articles/74

其它推荐:

user

ʘᴗʘ

77
文章数
52525
浏览量
41929
获赞数
67.80
总收入