环境描述
Intellij Idea 14.1.7
Tomcat 6.0.48
Spring 2.5.6.SEC01
Quartz 1.8.5
问题描述
在 Intellij Idea 中首次可以正常启动 Tomcat 和 Web 应用,但是在 Intellij Idea 中执行重启的时候,控制台中就会包以下的错误,导致无法正常重启或者关闭,必须要启动任务管理器, 强制杀调 java.exe 进程才行。
严重: The web application [] appears to have started a thread named [DefaultQuartzScheduler_QuartzSchedulerThread] but has failed to stop it. This is very likely to create a memory leak.
解决方案
引起该问题的原因是项目中添加了 Quartz 相关的 jar 包,在Web应用启动的时候,会在后台生成相应的线程池和正在运行的后台线程。Web 应用重启或者停止的时候,对应的线程无法关闭,导致整个应用挂起。
为了避免该问题的发生,需要在 web.xml 添加 Quartz 的监听
<!-- Quartz --> <listener> <listener-class>org.quartz.ee.servlet.QuartzInitializerListener</listener-class> </listener>
参考资料
【Quartz 官方文档 How-To: Shutting Down a Scheduler】
http://www.quartz-scheduler.org/documentation/quartz-2.x/cookbook/ShutdownScheduler
【Stackoverflow tomcat + spring + quartz = shutdown error】
https://stackoverflow.com/questions/28164312/tomcat-spring-quartz-shutdown-error