zoukankan      html  css  js  c++  java
  • 实战:SpringBoot 2.3.0新特性之优雅停机

    欢迎大家关注我的个人博客—精灵王,获取更好的阅读体验以及最新的文章分享~

    2.3.0新的性—优雅停机

    目前SpringBoot内置的四个嵌入式Web服务器(Jetty,Reactor Netty,Tomcat和Undertow)以及响应式和基于Servlet的Web应用程序都支持优雅关机。

    配置宽限期后,在关闭时,Web服务器将不再允许新请求,并且将等待宽限期以使活动请求完成。

    Demo尝试

    1.新建一个Spring-web项目,引入SpringBoot最新版本2.3.0.RELEASE

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot</artifactId>
        <version>2.3.0.RELEASE</version>
    </dependency>
    

    优雅停机要求Tomcat的版本必须在 9.0.33及以上, spring-boot 2.3.0.RELEASE 版本内置的Tomcat 是9.0.35 , 所以默认是支持的, 不用我们再考虑

    2.在application.properties添加配置

    ## 开启优雅停机, 如果不配置是默认IMMEDIATE, 立即停机
    server.shutdown=graceful
    ## 优雅停机宽限期时间
    spring.lifecycle.timeout-per-shutdown-phase=20s
    

    3.编写接口代码测试

    @GetMapping("sleep")
    public String sleep(Integer timeout){
        try{
            log.info("begin sleep:{}",timeout);
            TimeUnit.SECONDS.sleep(timeout);
            log.info("end sleep:{}",timeout);
        }catch(Exception e){
            e.printStackTrace();
        }
        return "sleep:" + timeout;
    }
    

    基本思路是, 上面宽限期时间配置的是20秒, 然后我们提供一个接口自定义睡眠时间, 调用两次接口, 入参分别15秒和30秒, 在请求后马上停机, 观察日志输出结果, 如果15秒入参请求能够成功输出并相应页面, 30秒入参请求会相应异常, 则说明优雅停机是正常工作的!

    4.执行测试方法

    输出结果截图:

    从输出结果截图可以看出, 成功打印出了end sleep:15, 并且15的请求成功响应了页面, 说明优雅停机有效

    关于如何优雅停机

    1. 不能使用kill -9,可以使用kill -2 pid 命令
    2. 请求 /actuator/shutdown
    3. 单击IDEA的Stop

    不同 web 容器优雅停机行为区别

    个人博客:精灵王

    Github代码示例

    一个点赞,一个评论,既是肯定,又是鼓励!期待和你一起交流学习、共同进步!
    微信搜索公众号“jinglingwangcoding”或扫描下方二维码,一起交流
  • 相关阅读:
    oracle维护表空间和数据文件
    IOS 应用的架构解析
    html5之拖放简单效果
    跟Google学习Android开发-起始篇-与其它应用程序交互(1)
    淘宝服务市场 淘宝订单同步方案
    论文阅读笔记
    页面爬虫(获取其他页面HTML)加载到自己页面
    由href return false 来看阻止默认事件
    Delete it
    Mac上利用Eclipse编译Cocos2d-x
  • 原文地址:https://www.cnblogs.com/admol/p/12910535.html
Copyright © 2011-2022 走看看