Spring BootでCommandLineRunner
インタフェースを使ったバッチの例外ハンドリング方法をメモしておきます。APIでは@ControllerAdvice
を使って例外ハンドリングする方法がありますが、バッチだとそういう便利なアノテーションなさそうだったので、AOPで実現することにしました。
CommandLineRunner
インタフェースの使い方については、以下記事をご覧ください。
Spring Bootで簡単なコマンドラインアプリケーションを作成してみる - Reasonable Code
AOPの@AfterThrowing
を使って例外ハンドリングする
CommandLineRunner
インタフェースを実装したクラスではrun
メソッドを@Override
する必要があります。つまり、必ずrun
メソッドが呼ばれることになります。そこで、AOPの@AfterThrowing
を使ってrun
メソッドで発生した例外を横断的に処理してやればいいのではと考えました。
CommandLineRunner
を使ったバッチで例外ハンドリングを実装したコードは以下のとおりです。
HogeException
といった独自例外クラスを作成し、業務の例外ごとにハンドリングすることも可能です。
まとめ
CommandLineRunner
を使ったバッチで例外ハンドリングを行う方法でした。今回の方法が最適解だとは思っていないのですが、ひとまずバッチ処理でも例外ハンドリングできることは確認できました。「もっといい方法があるよ」という方はぜひ教えていただきたいです。