tomcat中的shutdown hook(必要)没有运行

And*_*uss 4 java tomcat shutdown

我有一个长期运行的cpu和数据库密集型线程(以低优先级运行),可由管理员请求由我的tomcat应用程序触发.

我为此线程使用了一个关闭钩子,因此如果应用程序被强制停止,它可以在退出之前清理数据库状态.在独立模式下完美运行,使用control-C并在eclipse控制台中取消.

但是当在tomcat下运行时,当我执行时:

$ CATALINA_HOME/bin中/ shutdown.sh

我通过调试日志验证我的servlet contextDestroyed消息是由tomcat发送的,但是对于这个线程,消息无法阻止它,重要的是我的shutdown hook永远不会触发.

我注意到其他人说使用contextDestroyed消息,但这对我不起作用,而且一些问题和答案暗示关闭钩子在tomcat中为它们工作.

我正在使用tomcat 6.0.35.

Ste*_*n C 5

我注意到其他人说使用contextDestroyed消息,但这对我不起作用

好吧,我认为你需要考虑如何让它发挥作用.

设置关闭挂钩的webapp不是正确的解决方案.

  • Web应用程序关闭Web应用程序时,关闭挂钩将不会运行.这意味着如果重新启动或重新部署Web应用程序,则需要处理孤立的DB线程问题.

  • 如果您的关闭挂钩最终运行,则可能会失败,因为Web容器的其余部分已被Web容器关闭.例如,webapp的JDBC连接池通常已被破解.请注意,很多"的摧毁"的幕后发生,因为Tomcat的策略,以避免在重新部署的PermGen存储泄漏的一部分...