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 单文件发布的情况下,有没有相应的解决方案 ,不过没有找到 ,这里抛砖引玉下 。
springboot 优雅关闭_SpringBoot 2.3.0 优雅关闭 shutdown graceful相关推荐
- springboot2.0优雅关闭
本案例使用的是springboot2.0.4 当把打包好的jar包发布到服务器,并通过java -jar运行,一般要把springboot项目关闭大多数都是先找到项目的pid,然后直接kill pid ...
- springboot 优雅停机_Spring boot 2.3优雅下线,距离生产还有多远?
简介:对于任何一个线上应用,如何在服务更新部署过程中保证业务无感知是开发者必须要解决的问题,即从应用停止到重启恢复服务这个阶段不能影响正常的业务请求,这使得无损下线成为应用生命周期中必不可少的一个环节 ...
- 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener
=================6.SpringBoot拦截器实战和 Servlet3.0自定义Filter.Listener ============ 1.深入SpringBoot2.x过滤器Fi ...
- Springboot 2.6.1 + Nacos 2.0.3 + Dubbo 3.0.2.1
Springboot 2.6.1 + Nacos 2.0.3 + Dubbo 3.0.2.1 一.写在前面,先记录问题 1.记录一个奇怪的问题:执行 docker ps 报错:bash: /bin/d ...
- android 7.0 系统关闭彩信过CTA测试的方法
CTA测试要求关闭彩信功能. 底层的关闭,彩信是用网络发送的,在http检测到是mms的UA的时候,就给他返回一下 alps\external\apache-http\android\src\andr ...
- 优雅写mysql_如何写出优雅的代码?
我 18 年在 PyCon 做过一次类似的分享 ,目的是如何写出优雅的代码.希望能部分回答这个问题,也希望与大家多多讨论.<聊聊编程原则>zhuanlan.zhihu.com 要成为合格 ...
- 小米取消html打开txt,小米手机开启文件怎么删除音效 小米手机系统7.0版本关闭解锁音效方法如下...
工具/原料:小米手机6x 然后找到"系统应用设置"选项,点击进入. 接着找到"电话"选项,点击进入. 紧接着找到"高级设置"选项,点击进入. ...
- html监听页面关闭事件,JS针对浏览器窗口关闭事件的监听方法集锦
本文实例总结了JS针对浏览器窗口关闭事件的监听方法.分享给大家供大家参考,具体如下: 方式一:(适用于IE浏览器,而且刷新不提示,只在点击浏览器关闭按钮的时候提示) window.οnbefοreun ...
- 关闭mina服务_如何彻底关闭MINA客户端
在使用MINA做客户端程序时,发现虽然调用了session.close()方法,通过日志也确实看到当前session已经被关闭了,但未什么客户端程序进程却没有停止呢?即MINA客户端没有根本的关闭.这 ...
- eslint常用设置;eslint关闭驼峰命名;eslint关闭全等于===校验;eslint关闭未定义变量报错;eslint关闭声明后未使用变量报错;eslint关闭单闭合标签校验;
详细配置eslint操作可看此篇 eslint各种限制规则可看此篇 在 .eslintrc.js 文件修改规则:0关闭 1警告 2报错 module.exports = {root: true,par ...
最新文章
- 使用component小程序
- httpClient学习的初步认识
- Openstack平台搭建(先电版)
- Boost.Math 和 Boost.Multiprecision 以提供 许多十进制数字精度的测试程序
- Android开发技巧——大图裁剪
- linux安装通用plsql数据库,linux centOs中安装好数据库,客户端用plsql连接oracle
- 机器学习实战的P264中代码对应的公式推导
- 软件测试—软件测试基础知识—测试用例设计的方法之等价类和边界值
- eclipse中怎么安装spring插件_安装eclipse中容易遇到的问题
- termux安装python2_termux怎么安装python
- jquery mysql php_PHP+jQuery+MySQL来实现一个在线测试项目
- 只要你想要,世界尽在眼前 —— 超级搜索术之资源搜索
- linux 主机支持远程唤醒_在Linux下用Wake On LAN实现远程开机
- 坐标中c语言作正弦图,C语言绘制余弦、正弦曲线
- 什么是AOP(面向切片编程)
- 月考勤报表的TSQL查询
- [NXP i.MX6ULL] UBOOT-2020.04
- 图片加载框架Glide
- 如何使用CubeMX创建STM32F105的程序
- vue directives自定义指令的使用