我们运行我们的Web应用程序,我们开始一些Threads用于后台工作以及Quartz。 当我尝试关闭tomcat(在linux上使用shell脚本)时,我总是得到错误,说由于守护程序线程和Quartz线程而无法关闭tomcat。 我们已经尝试了不同的方法来关闭我们的线程(退出run方法)但我们依赖于类的一些静态变量来执行此操作,当我的关闭侦听器获得回调时它变为null
有没有一种标准方法可以关闭这种情况下的tomcat?
答案 0 :(得分:5)
现在可能的答案(如果你使用Spring),请查看this thread。如果你使用Spring,你可以在Spring的Spring配置中添加一个明确的destroy
子句,以便它可以干净地关闭。
否则一个Servlet监听器(我认为ServletContext监听器,但它已经有一段时间......)可以检测到关机,你可以手动关闭Quartz。
答案 1 :(得分:3)
不是答案,但很高兴知道:
JVM不为守护程序线程提供任何关闭保证。他们只是停下来。没有最后,没有垃圾收集,没有。
答案 2 :(得分:0)
FInally我能够得到它。问题不是tomcat,而是我们的应用程序起诉Initialize的方式。我们将应用程序的初始化(启动这些线程的类)移动到监听器中,如同servlet规范一样,servlet最后加载并首先卸载,首先加载监听器并最后从服务器卸载。 由extraneon给出的Spring链接非常有用