Spring Boot 服务优雅上下线实践指南
为什么要优雅上下线?
在微服务架构中,应用实例的频繁部署、扩缩容、重启都是常态。
如果不进行优雅上下线(Graceful Startup & Shutdown),就可能导致:
- 正在处理的请求被强制中断,造成接口异常或数据异常;
- 服务注册中心(如 Nacos)仍然认为节点可用,导致请求被路由到已关闭的实例;
- 新实例还没充分启动完成,请求就进来了,导致接口异常。
为了解决这些问题,我们需要让服务在启动和关闭阶段都更有序、更“温柔”、更可控。
Spring Boot 内置的优雅关闭机制
从 Spring Boot 2.3+ 开始,官方就支持优雅关闭(Graceful Shutdown):
server:
shutdown: graceful或通过启动参数启用:
-Dserver.shutdown=graceful这表示当 Spring Boot 接收到关闭信号(如 SIGTERM)时,不会立刻中断请求,而是:
- 停止接收新请求;
- 等待当前正在处理的请求完成;
- 超过等待时间后强制关闭。
