最新的 Spring Boot 2.3 发布快半个月了:java
https://spring.io/blog/2020/05/15/spring-boot-2-3-0-available-nowreact
其中有个新特性叫:Graceful shutdown(优雅关闭)web
以前也分享过这样的文章,如今居然出品官方姿式了,新功能嘛,确定得去官方看下,下面是官方的说明:面试
Graceful shutdown is supported with all four embedded web servers (Jetty, Reactor Netty, Tomcat, and Undertow) and with both reactive and Servlet-based web applications. When a grace period is configured, upon shutdown, the web server will no longer permit new requests and will wait for up to the grace period for active requests to complete.spring
下面,栈长给你们总结下:后端
优雅关闭支持全部 4 个嵌入式 Web 服务器:Jetty, Reactor Netty, Tomcat, Undertow,以及响应式的和基于 Servlet 的 Web 应用程序。缓存
当配置了一个优雅关闭的缓冲时间,直到应用程序关闭时,Web 服务器都再也不容许接收新的请求,缓冲时间是为了等待目前全部进行中的活动请求处理完成。tomcat
须要说明的是,Tomcat、Jetty 在网络层会当即中止接收请求,而 Undertow 能够继续接收请求,但会当即返回 503 服务不可用错误。服务器
注意:Tomcat 生效版本须要:9.0.33+微信
下面是 Yaml 文件的配置示例:
# 开启优雅关闭 server: shutdown: graceful # 关闭的缓冲时间 spring: lifecycle: timeout-per-shutdown-phase: 10s
上面介绍了优雅关闭参数的配置方式,下面咱们经过源码来看下默认的配置是什么。
先看第一个参数配置接收类:
org.springframework.boot.autoconfigure.web.ServerProperties
public enum Shutdown { GRACEFUL, IMMEDIATE; private Shutdown() { } }
如源码所示,默认为:IMMEDIATE
,因此优雅关闭是你们根据业务须要手动开启的。
再来看第二个参数配置接收类:
org.springframework.boot.autoconfigure.context.LifecycleProperties
如源码所示,默认缓冲时间为:30 秒。
再看下优雅关闭的源码:
根据 Graceful
能够找到几个相关的类,咱们进入 Tomcat 的:
org.springframework.boot.web.embedded.tomcat.GracefulShutdown
public enum GracefulShutdownResult { /** * Requests remained active at the end of the grace period. */ REQUESTS_ACTIVE, /** * The server was idle with no active requests at the end of the grace period. */ IDLE, /** * The server was shutdown immediately, ignoring any active requests. */ IMMEDIATE; }
REQUESTS_ACTIVE
说的是在缓冲期结束前链接保持活动状态,也就是虽然官方默认给你 30 秒的缓存时间来处理囤积请求,若是 30 秒以后还没处理完成,最后 Spring Boot 也会强制关闭应用。
因此须要注意的是,优雅关闭时必定要考虑当时的业务处理量,所设置的缓冲时间是否能处理完正在处理中的业务。
另外,Spring Boot 优雅关闭须要配合 Actuator 的 /shutdown
端点来进行触发,具体参考这篇文章:Spring Boot 优雅中止服务的几种方法。
好了,今天栈长就分享到了,你们能够了解学习下,对这个新特性感兴趣的朋友也能够实战测试下。
你们能够关注下栈长的微信公众号:Java技术栈,回复:福利,能够免费获取一份我整理的 2020 最新 Java 面试题,真的很是全(含答案),无任何套路。
推荐去个人博客阅读更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
以为不错,别忘了点赞+转发哦! 推荐去个人博客阅读更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
以为不错,别忘了点赞+转发哦!
最后,关注下面的栈长的微信公众号:Java技术栈,回复:福利,能够免费获取一份我整理的 2020 最新 Java 面试题,真的很是全(含答案),无任何套路。