1. Bean 销毁时连接池优雅关闭
请说明 Bean 销毁时连接池的优雅关闭(graceful shutdown)?
- 连接池关闭的时机与方式
- 未完成事务与借出连接的处理
- 优雅关闭的实现
连接池的优雅关闭是指在应用停机时,先停止接收新连接,等待正在执行的借出连接归还后,再关闭连接池。HikariCP 等连接池在 close() 时提供优雅关闭机制:标记关闭状态,等待活跃连接归还或超时,然后关闭底层连接。在 Spring 中,连接池 Bean 的销毁方法(@PreDestroy / DisposableBean)会在容器关闭时触发,配合停机钩子(shutdown hook)与 Spring Boot 的 graceful shutdown,先停止接收新请求、等待在途请求完成,再关闭连接池。未完成事务应回滚,借出连接需等待归还或强制关闭并告警。
优雅关闭的核心是"先停新请求,再等旧请求完成,最后关连接池",避免在途事务被强制中断导致数据不一致。理解停机顺序与连接归还等待,可避免数据丢失。