Java Webアプリケーションが停止したとき、またはTomcatが停止したとき、データを保存する必要があります。これを行う方法は?編集:jvmシャットダウンフックを使用する場合の欠点
Web.xmlで ServletContextListener を実装するクラスを使用します。
<web-app>
<!-- Usual stuff here -->
<listener>
<listener-class>com.mycompany.MyClass</listener-class>
</listener>
</web-app>
シャットダウン中に具体的にそれを行うのはなぜですか?そして、あなたは本当にneedを保存しますか(「絶対にクリティカルですか?」のように)、あなたはlikeになりますか(「would be nice but I liveそれなしで」)?
区別は重要です-どのメソッドを試しても(他の回答で示唆されているサーブレット/コンテキストリスナーまたは JVMシャットダウンフック )、実際には呼び出される保証なしがあります。
サーブレット/コンテキストリスナーの破棄イベントは、通常の(正常な)コンテナシャットダウン中にのみトリガーされますORアプリケーションのリロード中。アウトパワー)は明らかにどちらもトリガーしません。
レオンの答えへの追加として:
Springを使用する場合、Springの「ライフサイクル管理」を使用して同様の効果を実現できます。たとえば、Beanのメソッドに@PreDestroy
アノテーションを付けて、コンテナのシャットダウン時に自動的に呼び出されるようにすることができます。そうすれば、web.xml
に何も入れる必要はありません。
Spring beans factory lifecycle を参照してください。
Ehcacheを使用してこの情報をキャッシュすることをお勧めします。 ehcacheの永続ストアを使用している場合、Tomcatを再度起動しても、キャッシュされたデータは引き続き使用可能です。
実際、これは問題をehcacheに委任し、ehcacheはこれらのタイプの問題に最適化されています。