springboot优雅停止的流程梳理

ContextClosedEvent是Spring框架中的一个标准容器事件,当ApplicationContext被关闭时触发该事件。通过使用ConfigurableApplicationContext接口上的close()方法关闭ApplicationContext时发布。

在此事件触发时,所有单例Bean都会被销毁,封闭的上下文到达生命周期的终点,无法刷新或重新启动。这是Spring容器生命周期中的最后一个事件。

要监听ContextClosedEvent事件,可以实现ApplicationListener接口并重写onApplicationEvent方法,在该方法中判断事件类型并执行相应的处理逻辑。当容器关闭时,监听器中的相应代码就会被执行。

当调用ConfigurableApplicationContext接口的close()方法时,容器会启动关闭流程。在这个流程中,Spring会发布ContextClosedEvent事件,此时监听器会接收到该事件并执行onApplicationEvent方法。随后,容器才会继续执行后续的销毁操作,包括销毁所有单例Bean。

因此,onApplicationEvent方法执行时,容器正处于关闭过程中,但尚未完成所有资源的清理工作。

相关推荐
拿破轮2 分钟前
使用通义灵码解决复杂正则表达式替换字符串的问题.
java·服务器·前端
j***51892 分钟前
Java进阶,时间与日期,包装类,正则表达式
java·mysql·正则表达式
WZTTMoon39 分钟前
Spring Boot 启动全解析:4 大关键动作 + 底层逻辑
java·spring boot·后端
章鱼哥73040 分钟前
[特殊字符] SpringBoot 自定义系统健康检测:数据库、Redis、表统计、更新时长、系统性能全链路监控
java·数据库·redis
深圳佛手1 小时前
Sharding-JDBC 和 Sharding-Proxy 区别
java
皮皮林5511 小时前
SpringBoot + nmap4j 获取端口信息
spring boot
kk哥88991 小时前
inout参数传递机制的底层原理是什么?
java·开发语言
小二·2 小时前
Spring框架入门:深入理解Spring DI的注入方式
java·后端·spring
避避风港2 小时前
转发与重定向
java·servlet