zoukankan      html  css  js  c++  java
  • 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<String> 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 "
    关闭备用服务"
    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 单文件发布的情况下,有没有相应的解决方案 ,不过没有找到 ,这里抛砖引玉下 。

  • 相关阅读:
    小程序中点击input控件键盘弹出时placeholder文字上移
    微服务学习记录-consul服务发现
    微服务学习记录-ocelot网关
    一些新了解到技术
    warning: rpmts_HdrFromFdno: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
    linux 7 创建DNS服务器
    ESXi 主机创建datastore失败
    检查MD5
    为戴尔服务器下载ESXi
    vCenter Server上的报警消除
  • 原文地址:https://www.cnblogs.com/fejerry/p/14035502.html
Copyright © 2011-2022 走看看