由于守护程序线程,Tomcat没有干净地关闭

时间:2010-09-28 17:50:23

标签: java tomcat6

我们运行我们的Web应用程序,我们开始一些Threads用于后台工作以及Quartz。 当我尝试关闭tomcat(在linux上使用shell脚本)时,我总是得到错误,说由于守护程序线程和Quartz线程而无法关闭tomcat。 我们已经尝试了不同的方法来关闭我们的线程(退出run方法)但我们依赖于类的一些静态变量来执行此操作,当我的关闭侦听器获得回调时它变为null

有没有一种标准方法可以关闭这种情况下的tomcat?

3 个答案:

答案 0 :(得分:5)

现在可能的答案(如果你使用Spring),请查看this thread。如果你使用Spring,你可以在Spring的Spring配置中添加一个明确的destroy子句,以便它可以干净地关闭。

否则一个Servlet监听器(我认为ServletContext监听器,但它已经有一段时间......)可以检测到关机,你可以手动关闭Quartz。

答案 1 :(得分:3)

不是答案,但很高兴知道:

JVM不为守护程序线程提供任何关闭保证。他们只是停下来。没有最后,没有垃圾收集,没有。

答案 2 :(得分:0)

FInally我能够得到它。问题不是tomcat,而是我们的应用程序起诉Initialize的方式。我们将应用程序的初始化(启动这些线程的类)移动到监听器中,如同servlet规范一样,servlet最后加载并首先卸载,首先加载监听器并最后从服务器卸载。 由extraneon给出的Spring链接非常有用