スプリングブート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");
});
}
自分でスレッドプールを処理する代わりに、 '@ Async'アノテーションを使用してみてください。 '@Async'で注釈が付けられたメソッドは別のスレッドで実行されます。例外は、あなたのコントローラ –
に 'ExceptionHandler' @でそれを扱うことができます発生した場合、それは、レガシー・アプリケーションであり、リファクタリングの多くを取ります –