私はSpring Boot(ver 1.4.2)アプリケーションで多くのスケジュールされたタスクを持っており、可能であるようなハンドラを使ってすべての例外をキャッチしたい注釈が@ExceptionHandlerの通常のコントローラの場合Java設定のSpring(Boot)の@Scheduledタスクのユニバーサル例外ハンドラ
@Component
public class UpdateJob {
@Transactional
@Scheduled(cron = "0 1 0 * * *")
public void runUpdateUsers() {
userService.updateUsers();
}
@ExceptionHandler
public void handle(Exception e) {
// some more logic here
logger.error(e.getMessage());
}
}
@ExceptionHandlerが@Scheduled方法のために動作しません(それはそれが意味するものではない判明):このアプローチは、理由のスレッドの@Scheduledアノテーションで定義されたタスクのために動作しません。代わりに、春ブーツは、それが自分のLoggingErrorHandlerだ使用しています。
2016-12-08 15:49:20.016 ERROR 23119 --- [pool-7-thread-1] o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task.
私は何とかスケジュールされたタスクのデフォルトの例外ハンドラを交換したり、供給することができますか?または、私が理解しているようにエラーをさらに伝播するPropagatingErrorHandlerに切り替えることは意味をなさないでしょうか? Java構成(XMLなし)のみを使用して目標を達成する他の方法はありますか?
それが明示的に(任意のXML設定せずに春ブーツプロジェクトに組み込むまともです)のためのJava構成ではなく、XMLに基づくソリューションを要求するので、これはthis questionの複製ではありません。
また、TaskSchedulerを最初から設定する方法を示すいくつかの回答があります。たとえば、answerでは、プールサイズ、最大プールサイズ、キュー容量も定義する必要があります。 Hereは、非常に広範な構成も必要とするソリューションです。 Documentationは、他の側面を設定する方法を示しますが、エラー処理を指定する方法は示しません。しかし、私はSpringブートのデフォルト値(スレッドプール、エグゼキュータ設定など)を最大限に保つために、Java設定で最低限必要な作業は何ですか?
例外ハンドラはWebハンドラメソッド用です。 –
推論を提供してください。メソッドやクラスに例外ハンドラを使用できない理由はありますか?用語「Webハンドラ」はASP.netにも当てはまりますが、おそらくそれは異なっていますか? –
これはwebmvcインフラストラクチャの一部です。それは '@ Controller'で使われることを意図しています。あなたがリンクしたjavadocを読んでください。 –