springboot 优雅关闭_SpringBoot 2.3.0 优雅关闭 shutdown graceful

后记

写完篇文章后就把项目升级了该功能 ,但是上线后发现 kill-2 xxx关闭不了,没有反应 ,直接kill xxx 可以 。

缘起

最近看到Springboot 新版有了 优雅关闭的新特性,于是学习验证了下

学习

很简单 ,在application.yml 中配置 server.shutdown=graceful即可 ,启用该选项,web容器在关闭时会有始有终的处理完已经接收到的请求,注意,此时新的请求已经无法接收了。

验证

创建demo程序

创建一个SpringBoot web项目 ,注意版本要在2.3.0及以上 ,启动参数模拟版本号,

然后创建一个接口,接收一个字符串参数 ,sleep30秒,最后返回版本号和用户传来的参数。

@RestController

@SpringBootApplication

public class DemoApplication {

public static void main(String[] args) {

SpringApplication.run(DemoApplication.class, args);

}

@Resource

private ApplicationArguments arguments;

@RequestMapping("/show/{str}")

public Object test(@PathVariable("str") String str) throws InterruptedException {

List version = arguments.getNonOptionArgs();

System.out.println("[start] - > " + version.get(0) +"--" +str);

Thread.sleep(30 * 1000L);

System.out.println("[end] - > " + version.get(0) + "--" + str);

return version.get(0) +"--" +str;

}

}

打包启动

打包好程序fe.jar ,使用命令启动: java -jar fe.jar v1 --server.port=8123

然后用浏览器访问这个接口 http://192.168.1.22:8123/show/tom

关闭它

在30秒之内关闭它 ,使用kill -2 xxx 命令 (注意这里一定不能用-9,会直接少杀死它)。程序收到kill命令 ,控制台立马打印出了 [extShutdownHook] o.s.b.w.e.tomcat.GracefulShutdown : Commencing graceful shutdown. Waiting for active requests to complete 这行消息。直到处理完来自tom的请求。

在它还没完全关闭时,其实我也发了一些请求过来,都直接失败了。

验证还没完全关闭时,启动新版能否成功

写了个shell脚本,用来关闭监听8123的进程 ,然后立马启动新版程序;

#!/bin/sh

QYPATH="/home/testiron"

chmod 777 $QYPATH/fe.jar

# 关闭V1

VID=`ps -ef|grep java|grep 8123|awk '{print $2}'`

echo "\n关闭备用服务"

if [ -n "$VID" ]

then

for i in $V7D;

do kill -2 $i

echo "kill $i done";

done

fi

# 启动V2

java -jar /home/testiron/fe.jar  v2 --server.port=8123

发现是可以启动的,不会出现端口占用的问题。

思考

因为以前写.net ,所以去了解了下.net core 单文件发布的情况下,有没有相应的解决方案 ,不过没有找到 ,这里抛砖引玉下 。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值