Spring Boot定时任务Tomcat关闭时触发Illegal Access异常排查
Tomcat关闭时Spring Boot定时任务抛出异常?这绝对不正常!
先直接给你结论:这种带有IllegalStateException和NoClassDefFoundError的异常堆栈完全不属于正常关闭行为,核心原因是你的项目缺失了关键日志依赖,导致Spring销毁定时任务上下文时出现类加载失败。
背后的原因分析
你的Spring Boot WAR应用配置了定时任务@Scheduled(cron = "0 0 4 15/1 3/10 ?"),在Tomcat关闭阶段,Spring会触发定时任务的销毁逻辑。而Spring默认依赖logback作为日志框架,这个销毁过程中需要调用logback的核心类——但你的项目里刚好缺了logback-core依赖,就导致了类找不到的错误,进而引发了后续的异常。
这种依赖缺失通常是因为:
- pom.xml中不小心排除了logback相关组件
- 依赖传递链被其他依赖打断(比如引入其他日志框架导致冲突)
- 打包过程中遗漏了这个核心依赖
你找到的解决方案完全正确
手动添加logback-core(版本1.2.3)依赖确实能解决问题,它补上了缺失的核心类,让Spring在销毁定时任务上下文时能正常执行日志相关逻辑,不会再抛出异常。具体的依赖配置如下:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency>
补充一句:如果你的项目已经引入了logback-classic,理论上它会自动传递依赖logback-core,但如果存在依赖冲突或者主动排除的情况,就必须显式声明这个依赖来确保类加载正常。
内容的提问来源于stack exchange,提问作者Thomas Lang
相关产品推荐
相关产品推荐

