Tomcat 6中的Quartz调度程序,线程不会停止

Tom*_*ffi 13 java quartz-scheduler tomcat6

对于我的webapp,我使用Quartz.当我部署应用程序时,一切正常.当我取消部署应用程序时,Quartz线程不会被销毁.

日志是:

信息:停止服务Catalina

严重:Web应用程序[/ example]似乎已经启动了一个名为[DefaultQuartzScheduler_Worker-1]的线程,但未能阻止它.这很可能造成内存泄漏.2010年7月12日下午6:30:40 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

任何人都可以告诉我如何强制这些线程的销毁行动?

谢谢,

托马索

Tom*_*eba 6

我发现对我来说问题是石英正在关闭但是webapp没有等到石英完成它才关闭所以Tomcat决定它已经让线程运行并抱怨.

所以我像这样管理我的调度程序:

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
...do some stuff with the scheduler...
scheduler.shutdown(true);
Run Code Online (Sandbox Code Playgroud)

注意关闭的boolean参数是至关重要的部分.如果你删除它true来调用no-arg版本或将其设置为false,你的webapp将不会等待石英在关闭之前甩掉.

TL; DR:打电话scheduler.shutdown(true)让你的w​​ebapp等待石英完成.


mat*_*t b 4

你是如何启动石英的?

假设您没有使用像 Spring 这样方便的包装器,您可能希望<listener>在应用程序的 web.xml 中使用 a ,以便 Quartz 可以收到应用程序启动关闭的通知。

例如,请参见QuartzInitializerListenerQuartzInitializerServlet 。