用于java Web应用程序的shutdown hook

时间:2009-10-11 05:24:27

标签: java web-applications shutdown

当java Web应用程序停止或tomcat停止时,我需要优先保存一些数据。如何才能做到这一点? 编辑: 如果我使用jvm shutdown hook会有什么缺点吗?

4 个答案:

答案 0 :(得分:52)

在web.xml中使用实现ServletContextListener的类:

<web-app>
    <!-- Usual stuff here -->
    <listener>
        <listener-class>com.mycompany.MyClass</listener-class>
    </listener>
</web-app>

答案 1 :(得分:15)

为什么要在关机期间专门执行此操作?你真的需要来保存它(如“它绝对是关键的吗?”)或者你喜欢(就像“会很好但我会活着”没有它“)?

区别很重要 - 无论你尝试什么方法(其他答案或JVM shutdown hook建议的servlet /上下文监听器),无保证都会实际调用它。< / p>

Servlet /上下文侦听器销毁事件只会在正常(正常)容器关闭期间或应用程序重新加载期间触发。在进程中断期间也会触发JVM关闭挂钩;然而,杀死一个过程(或切断电源)显然不会触发。

答案 2 :(得分:11)

作为leonm答案的补充:

如果使用Spring,可以使用Spring的“生命周期管理”来实现类似的效果。例如,您可以使用@PreDestroy在bean中注释方法,以便在容器关闭时自动调用它。这样,您就不需要在web.xml中添加任何内容。

请参阅Spring beans factory lifecycle

答案 3 :(得分:3)

我建议使用ehcache来缓存此信息。如果您使用ehcache的持久存储,那么当您再次启动Tomcat时,缓存的数据仍然可用。

实际上,这会将问题委托给ehcache,后者针对这些类型的问题进行了优化。