簡體   English   中英

用於java Web應用程序的shutdown hook

[英]shutdown hook for java web application

當java Web應用程序停止或者tomcat停止時,我需要優先保存一些數據。 如何才能做到這一點? 編輯:如果我使用jvm關閉鈎子的任何缺點?

使用在web.xml中實現ServletContextListener的類:

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

為什么要在關機期間專門做? 而你真的需要將其保存(如“是絕對關鍵的?”),或者你 (如“將是不錯,但我會沒有它”)?

區別很重要 - 無論您嘗試何種方法(其他答案或JVM關閉鈎子建議的servlet /上下文偵聽器),都無法保證實際調用它。

Servlet /上下文偵聽器銷毀事件只會在正常(正常)容器關閉期間或應用程序重新加載期間觸發。 在進程中斷期間也會觸發JVM關閉掛鈎; 然而,殺死一個過程(或切斷電源)顯然不會觸發。

作為leonm答案的補充:

如果使用Spring,可以使用Spring的“生命周期管理”來實現類似的效果。 例如,您可以使用@PreDestroy注釋bean中的方法,以便在容器關閉時自動調用它。 這樣,您就不需要在web.xml任何內容。

請參閱Spring beans工廠生命周期

我建議使用ehcache來緩存這些信息。 如果您使用ehcache的持久存儲,那么當您再次啟動Tomcat時,緩存的數據仍然可用。

實際上,這會將問題委托給ehcache,后者針對這些類型的問題進行了優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM