我有一个长时间运行的 cpu 和数据库密集型线程(以低优先级运行),可以根据管理员请求由我的 tomcat 应用程序触发。
我为此线程使用了关闭钩子,这样如果应用程序被强制停止,它可以在退出之前清理数据库状态。在独立模式下完美工作,使用 control-C 并在 eclipse 控制台中取消。
但是当在 tomcat 下运行时,当我执行以下操作时:
$CATALINA_HOME/bin/shutdown.sh
我通过调试日志记录验证了我的 servlet contextDestroyed 消息是由 tomcat 发送的,但是对于这个线程,该消息无法阻止它,重要的是我的关闭挂钩永远不会触发。
我注意到其他人说使用 contextDestroyed 消息,但这对我不起作用,而且一些问题和答案暗示 shutdown hook 在 tomcat 中适用于他们。
我使用的是tomcat 6.0.35。
我注意到其他人说使用 contextDestroyed 消息,但这对我不起作用
好吧,我认为你需要考虑如何才能让它起作用.
设置关闭挂钩的 Web 应用程序不是正确的解决方案。
当您的 Web 应用程序被 Web 容器关闭时,关闭挂钩将不会运行。这意味着如果您重新启动或重新部署您的 Web 应用程序,您将遇到需要处理孤立数据库线程的问题。
如果您的关闭挂钩最终运行,它很可能会失败,因为您的 Web 应用程序的其余部分已经被 Web 容器关闭。例如,Web 应用程序的 JDBC 连接池通常会被破坏。请注意,许多“核武器”发生在幕后,作为 Tomcat 避免重新部署时 PermGen 存储泄漏的策略的一部分......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)