2016-10-21 6 views
1

スプリングブート1.3.5.RELEASEアプリケーションには休止APIがあります。このAPIは、ThreadPoolExecutorを使用して非同期でプロセスを開始します。新しいスレッドからのスプリングブートログランタイム例外

私の問題は、処理されなかったシナリオで非同期処理が実行時例外をスローするが、スタックトレースがログに記録されないということです。私はlog4jを使用しています。

これは大きな問題です。実際の問題をデバッグして確認するには多くの時間がかかります。

私は@ControllerAdviceを認識していますが、新しいスレッドが開始され、春が例外をインターセプトしなくなったときにコンテキストが終了すると思います。

未解決の例外をSpringコンテキストにリダイレクトする方法、またはこの問題にどう対処する必要がありますか?

私は私にはわからないよう、開発者がキャッチされない例外

でクラッシュする新しいスレッドを開始する場所、例外のこれらのタイプをキャッチし、アペンダに自分のスタックトレースを追加する一般的な解決策を探しています

@RequestMapping("/api/test") 
public void doSomething() { 
    ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(10, 10, 10 , TimeUnit.SECONDS, new ArrayBlockingQueue<>(10, true)); 
    threadPoolExecutor.execute(() -> { 
     throw new RuntimeException("some exception"); 
    }); 
} 
+1

自分でスレッドプールを処理する代わりに、 '@ Async'アノテーションを使用してみてください。 '@Async'で注釈が付けられたメソッドは別のスレッドで実行されます。例外は、あなたのコントローラ –

+0

に 'ExceptionHandler' @でそれを扱うことができます発生した場合、それは、レガシー・アプリケーションであり、リファクタリングの多くを取ります –

答えて

0

@ControllerAdviceを作成して、Throwableを注入してログを呼び出そうとしましたか?

関連する問題