2009-12-01 21 views
9

シャットダウン時にBean破壊メソッドを呼び出さないSpringアプリケーションがあります。私はbeanRefFactoryのインスタンス化のためにこれが参照されていることを知りました。これはアプリケーションコンテキストでregisterShutdownHook()を手動で呼び出すことで回避できます。このメソッドはバージョン2.0〜2.5の間で春から消えているようです。Spring 2.5でシャットダウンフックを登録する

誰かがこれが今行われている方法の方向に私を指摘できますか?

ありがとうございました。

+0

説明した最初の問題の説明へのリンクを投稿できますか? – skaffman

答えて

17

この方法はまだで利用でき、AbstractApplicationContextで実装されています。 、

Runtime.getRuntime().addShutdownHook(new Thread() { 
    public void run(){ 
     if (ctx instanceof ConfigurableApplicationContext) { 
      ((ConfigurableApplicationContext)ctx).close(); 
     } 
    } 
}); 
0

そう多くのupvotes:

は、だから、あなたは、単にアプリケーションを閉鎖したり、独自のシャットダウンフックを使用しながら、自分自身を((ConfigurableApplicationContext)ctx).close()を呼び出すことができ、またこの

ApplicationContext ctx = ...; 
if (ctx instanceof ConfigurableApplicationContext) { 
    ((ConfigurableApplicationContext)ctx).registerShutdownHook(); 
} 

を行うことができるかもしれません2番目のステートメントは完全に間違っています。javaのsystem.exitは、あなたのshutdownhookに到達する前にSpringを終了させるでしょう。正しい方法はこれらの4つの方法です。

1 InitializingBeanとDisposableBeanコールバックインタフェース固有の動作のための 2その他Awareのインターフェース 3カスタムのinit()およびdestroy()Bean構成ファイル内のメソッド 4 @PostConstructと@PreDestroy注釈

クリックhere

関連する問題