2016-07-24 16 views
1

私はSpring Webアプリケーションを持っています。アプリケーションのコンテキストが開始されると、私はApplicationListener<ContextRefreshedEvent>を使用してアプリケーションの初期化を実行します。特に、Webサービスからデータをロードします。このWebサービスにアクセスできない場合、アプリケーションは何も役に立たず、実行し続けるのは意味がありません。プログラムコンテキストでアプリケーションコンテキストをシャットダウンする方法はありますか?Spring Webアプリケーション:初期化が失敗した場合のシャットダウン

私は次の操作を実行しようとしてい

if (contextRefreshedEvent instanceof ConfigurableApplicationContext) 
{ 
    ConfigurableApplicationContext configurableApplicationContext 
      = (ConfigurableApplicationContext) contextRefreshedEvent; 
    configurableApplicationContext.close(); 
} 

しかしいうし、それが次の例外を生成正常終了:

java.lang.IllegalStateException:たBeanFactory初期化したり、すでに閉じられていない - 呼び出し「リフレッシュを'ApplicationContext経由でBeanにアクセスする前に

このような状況でアプリケーションをシャットダウンする適切な方法は何ですか?

+0

サービスが稼動しているかどうかを確認するためにスケジュールされた操作をいくつか設定し、それができるまで待つことができました。しかし、起動時の例外によるアプリケーションの終了は問題ありません。代わりに、例外をキャッチしてsystem.exit(0)を実行することができます。例外のリストに含まれている場合はログの理由があります。そうでない場合は – Sarief

+0

を呼び出すことになります。 'System.exit'を呼び出すのはかなり不愉快な考えですあなたが望むものではないあなたのサーバーを殺す。基本的にアプリケーションの起動を停止する例外をスローします。 –

+0

私は 'System.exit'を使うオプションを知っていますが、@ M.Deinumにはとても良いアイデアではないと私は同意します。例外をスローするのを避けるためにこれを行うためのきれいな方法はありませんか? – lanoxx

答えて

0

ApplicationContextExceptionを投げます。それは、Spring 4.2.7でリリースされました。リリース:

関連する問題