Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tomcat中的关机挂钩(必要)未运行_Java_Tomcat_Shutdown - Fatal编程技术网

Java tomcat中的关机挂钩(必要)未运行

Java tomcat中的关机挂钩(必要)未运行,java,tomcat,shutdown,Java,Tomcat,Shutdown,我有一个长时间运行的cpu和数据库密集型线程(以低优先级运行),可以通过管理员请求由tomcat应用程序启动 我为这个线程使用了一个shutdownhook,这样,如果应用程序被强制停止,它可以在退出之前清理数据库状态。使用eclipse控制台中的control-C和Cancel,完全可以在独立模式下工作 但在tomcat下运行时,以及在我执行以下操作时: $CATALINA_HOME/bin/shutdown.sh 我通过调试日志验证了我的servlet contextDestroyed消息是

我有一个长时间运行的cpu和数据库密集型线程(以低优先级运行),可以通过管理员请求由tomcat应用程序启动

我为这个线程使用了一个shutdownhook,这样,如果应用程序被强制停止,它可以在退出之前清理数据库状态。使用eclipse控制台中的control-C和Cancel,完全可以在独立模式下工作

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

$CATALINA_HOME/bin/shutdown.sh

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

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

我正在使用tomcat 6.0.35

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

嗯,我想你需要想一想怎样才能使它工作起来

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

  • 当web容器关闭您的web应用程序时,关闭挂钩将不会运行。这意味着,如果重新启动或重新部署webapp,则需要处理孤立的DB线程

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

我有一个长时间运行的cpu和数据库密集型线程(以低优先级运行),可以通过管理员请求由tomcat应用程序启动

为什么不在进程外运行它,而不去理会webapp、上下文事件、关机挂钩或其他任何东西呢


关机钩子是一个难题,正如@StephenC所说,它们不会在你想要的时候启动。

此外,如果你在不重新启动的情况下重新部署,这个低优先级的webapp启动线程(在上下文之外)将相当快地导致PermGen泄漏。只是一个坏主意。