更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞👍收藏⭐评论✍
重学SpringBoot3-怎样优雅停机
在现代微服务架构中,优雅停机(Graceful Shutdown)是一项重要功能,可以确保服务在关闭时处理完所有当前请求,避免突然终止连接或丢失数据。Spring Boot 3 提供了对优雅停机的内置支持,允许在关闭应用程序上下文期间为现有请求设置一个宽限期,同时防止新请求进入。本文将详细介绍 Spring Boot 3 的优雅停机机制,重点分析 Tomcat 和 Reactor Netty 两种常用的嵌入式 Web 服务器的优雅停机流程。
1. 什么是优雅停机?
优雅停机的目标是在服务关闭时:
- 允许当前的处理请求在指定的宽限期内完成。
- 阻止新的请求进入。
- 向外部监控或负载均衡器标记服务为不可用。
这种机制可以确保服务在维护或版本升级时避免数据丢失和请求中断,提供更高的稳定性和可用性。
2. Spring Boot 3 优雅停机的配置
在 Spring Boot 3 中,我们可以使用 server.shutdown
配置来开启优雅停机,并指定宽限期。配置项如下:
server:
shutdown: "graceful" # 开启优雅停机
spring:
lifecycle:
timeout-per-shutdown-phase: "20s" # 停机的宽限期,默认为 30 秒
此配置项适用于所有四种嵌入式 Web 服务器:Tomcat、Jetty、Reactor Netty 和 Undertow。
注意:Spring Boot 3 默认禁用优雅停机,需要将
server.shutdown
设置为graceful
以启用。
3. Tomcat 和 Reactor Netty 的优雅停机机制
Spring Boot 3 支持在不同的 Web 服务器上实现优雅停机。以下是 Tomcat 和 Reactor Netty 的具体停机方式:
3.1 Tomcat 优雅停机
使用Tomcat的优雅关机需要Tomcat 9.0.33或更高版本,在 Tomcat 上启用优雅停机后,当收到关闭信号时,它将停止接受新的连接请求,并在网络层阻止传入流量:
- 阻止新请求:一旦启动关闭流程,Tomcat 将在网络层拒