2017-06-17 2 views
2

私はTomcat上でSpringアプリケーションを実行しています。初期化のデプロイメント中に、何らかのエラーが発生することがあります(つまり、JDNIの値が見つからない、またはサービスが一部のサービスに接続できないなど)。ですから、これが起こると例外がスローされ、@Configurationファイルにキャッチされます。キャッチブロックでは、System.exit(-1)でアプリケーションを閉じようとします。しかし、それを行う正しい方法ではないようです。原因Intellijは能力がない、またはサーバーをオフにしています。サーバーがオフになるまでリソースが解放されないこともあります。初期化時にスプリングを閉じる

私も試みた:

@Autowired 
public ApplicationContext application context 
@Bean 
public IServerDataCache serverDataCache() { 
    try { 
     return new ServerDataCache(args); 
    } catch(InitializationError initializationError) { 
     log.error("Unable to load configuration for Server Data Cache. Closing application."); 
     System.exit(1); OR SpringApplication.exit(applicationContext) 
    } 
    return null; 
} 

両方はSystem.exit(1)。またはSpringApplication.exit(applicationContext)にも同じ効果があるようです。アプリケーションファイナライズを強化するためのより良い方法のアイデア。

ところで春の起動アプリケーションです。

答えて

1

@Beanメソッドが例外をスローするようにしてください。それはコンテナに捕らえられ、次に物事を整理して処理します。

+0

だけ明確にする、提案はこのようなものです: @Bean 公共IServerDataCache serverDataCache()InitializationErrorは{新しいServerDataCache(引数)を返し 投げます。 } – kewne

+0

わかりました –

1

ときアンディ・ウィルキンソンの答えが正しいですが、私はちょうど( Tomcatの組み込みではなく)あなたがTomcatでアプリケーションを実行していることから、それを追加したいのですが、Tomcatサーバはないシャットダウンを行いますアプリケーションが起動しない。 TomcatはすべてのJavaEEコンテナと同様に、一度に複数のアプリケーションを実行するため、これは設計上の問題です。

アプリケーションが失敗したときにプロセス全体を停止したい場合は、組み込みコンテナを使用するように切り替える必要があります。

関連する問題