在Spring Boot应用中,优雅地关闭应用涉及到确保所有的系统资源得到妥善处理,包括数据库连接、网络连接、线程池等被正确关闭,同时允许当前正在进行的操作完成。以下是实现优雅关闭的一些步骤:
1. 使用Spring Boot Actuator的shutdown端点
Spring Boot Actuator 提供了一个/shutdown
端点(默认情况下是禁用的),可以用来安全地关闭应用程序。
- 启用shutdown端点:在
application.properties
或application.yml
中启用shutdown端点。
management.endpoint.shutdown.enabled=true
- 关闭应用:可以通过发送一个POST请求到
/actuator/shutdown
端点来关闭应用。
curl -X POST http://localhost:8080/actuator/shutdown
2. 使用Spring Boot的Phased Shutdown
Spring Boot 2.3 引入了分阶段关闭(Phased Shutdown)功能,它允许应用程序在关闭时等待异步任务完成。
- 配置分阶段关闭:在
application.properties
或application.yml
中配置。
spring.lifecycle.timeout-per-shutdown-phase=30s
- 使用@PreDestroy注解:在需要执行的清理逻辑上使用
@PreDestroy
注解。
@Component
public class MyBean {
@Pre