You need to enable JavaScript to run this app. Spring Boot不调用DisposableBean.destroy()方法的问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot不调用DisposableBean.destroy()方法的问题咨询

原因分析
  • 终止进程的方式不符合优雅停机要求:Spring 容器的Bean销毁逻辑仅在优雅停机流程中触发。如果通过IDE的强制停止按钮(通常发送SIGKILL信号)、直接关闭运行终端、任务管理器强制结束进程等方式停止应用,Spring 上下文没有执行销毁流程的时间,不会调用destroy方法。
  • Bean作用域问题:如果Bean的scope设置为原型(prototype),Spring 容器仅负责实例化和初始化该类型Bean,不会管理其完整生命周期,不会主动调用销毁方法。你当前使用@Component默认是单例scope,该场景可以直接排除。
验证方案

方式1:使用Actuator端点触发优雅停机

  1. 引入spring-boot-starter-actuator依赖
  2. 在application配置文件中添加如下配置:
# 开启shutdown端点
management.endpoint.shutdown.enabled=true
# 暴露shutdown端点到web
management.endpoints.web.exposure.include=shutdown
  1. 应用启动后,向/actuator/shutdown接口发送POST请求触发优雅停机,即可看到destroy方法的日志输出。

方式2:命令行触发停机

将项目打包为jar包后,执行java -jar xxx.jar命令启动应用,随后按下Ctrl + C触发进程终止,正常情况下会打印destroy方法的日志。

补充说明

除了实现DisposableBean接口,你也可以通过@PreDestroy注解声明销毁方法,两者的触发时机和效果完全一致,无需额外配置。

内容的提问来源于stack exchange,提问作者hurelhuyag

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 20:36:09