使用quartz和struts框架时,正常处理Tomcat关闭

ana*_*h85 3 tomcat struts quartz-scheduler

我正在使用struts和quartz框架来安排工作.它工作正常.

但是当我停止Tomcat(6.0.26)时,它会在控制台上抛出错误

"Web应用程序似乎已经启动了一个名为[.....]的线程,但未能阻止它.这很可能会导致内存泄漏.

任何人都知道如何优雅地处理这个......

目前我的struts config.xml看起来像这样: <plug-in className="com.example.scheduler.SchedulerPlugin"> <set-property property="startOnLoad" value="true"/> <set-property property="startupDelay" value="0"/> </plug-in>

min*_*das 5

确切知道的最好方法是发送一个SIGQUIT(kill -3)程序并分析输出以查看哪个线程仍在运行.

您的作业(在Quartz线程之一上运行)很可能不会对关闭信号做出反应并继续工作.对于长时间工作,您可以jobExecutionContext.getScheduler().isShutdown()定期检查或编程您的工作,以便InterruptableJob正确应对中断.


jho*_*use 5

您需要调用 scheduler.shutdown(true) 来告诉 Quartz 等待任何正在进行的作业完成执行。

此外,一些 tomcat 用户报告说,他们还需要在关闭调用后暂停线程一秒钟左右,以便在 tomcat 尝试检测线程是否仍在运行之前让其他线程的 cpu 有时间进行清理。

请参阅此处的讨论:http : //forums.terracotta.org/forums/posts/list/3479.page