java - tomcat 中的关闭 Hook (必需)未运行

标签 java tomcat shutdown

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

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

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

$CATALINA_HOME/bin/shutdown.sh

我通过调试日志记录验证了我的 servlet contextDestroyed 消息是由 tomcat 发送的,但是对于这个线程,消息无法阻止它,重要的一点是我的关闭钩子(Hook)永远不会触发。

我注意到其他人说使用 contextDestroyed 消息,但这对我不起作用,而且一些问题和答案暗示关闭 Hook 在 tomcat 中适用于他们。

我使用的是 tomcat 6.0.35。

最佳答案

I noticed other people saying use contextDestroyed message, but that won't work for me

嗯,我认为您需要考虑如何让它发挥作用

设置关闭 Hook 的 webapp 不是正确的解决方案。

  • 当您的 Web 应用程序被 Web 容器关闭时,关闭钩子(Hook)将不会运行。这意味着如果您重新启动或重新部署您的 web 应用程序,您将遇到孤立的数据库线程问题。

  • 如果您的关闭 Hook 最终运行,它很可能会失败,因为您的 web 应用程序的其余部分已经被 web 容器关闭。例如,webapp 的 JDBC 连接池通常会被破坏。请注意,作为 Tomcat 在重新部署时避免 PermGen 存储泄漏的策略的一部分,许多“核攻击”都在幕后发生......

关于java - tomcat 中的关闭 Hook (必需)未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11443133/

相关文章:

java - .CSV 输出格式问题

Java Spring JPA 存储库

azure - 来自 Azure 的 Tomcat Web App 中的位置标准输出日志

java - Activiti Explorer - 请求资源不可用

java - 我必须在应用程序退出时手动关闭 Executor 吗?

可以接收来自 linux/upstart/ubuntu 的关闭/终止请求的 C 程序

java - gcm 在客户端没有收到消息

java - 检查 nfc 标签是否在附近

java - JSF 应用程序为子上下文提供 404

delphi - 防止 Windows 关闭