[英]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.