😇
Spring Boot 3にアップデートしたらSpring Batchが動かなくなった
どんな人向け?
- Spring Boot 2系でSpring Batchを使用したプロジェクトを持っていて、Spring Boot 3にアップデートする人。
この記事が扱う問題は?
- Spring Boot 3にアップデートしたら、Spring Batchのジョブが起動しなくなった。
- Spring Boot 3にアップデートしたら、バッチのメタデータ用
DataSource
に@BatchDataSource
を指定していたのに突然メインのDataSource
を使いだした。
結論
@EnableBatchProcessing
を付与した場合の挙動が変わったためです。
- Spring Boot 2系 × Spring Batch 4系: Spring Batchの機能を有効化する
- Spring Boot 3系 × Spring Batch 5系: Spring Batchの機能をカスタマイズできるようにする
特にBatchの機能をカスタマイズして使っているわけではない場合、@EnableBatchProcessing
を外してみてください。
解説
Spring BootでSpring Batchを使用する場合、関連するBeanはSpring Bootのorg.springframework.boot.autoconfigure.batch.BatchAutoConfiguration
で自動構成されます。
- Spring Batch 4 → 5へのアップデートでは、設定クラスに破壊的変更がありました。
- Spring Boot 3はこれに追従し、Spring Batchの
DefaultBatchConfiguration
をベースとしてカスタマイズする方式に変更しました。 - Spring Bootの
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration
は@EnableBatchProcessing
が付与されたBeanが存在すると有効にならず、Spring Batch関連Beanがカスタマイズ可能な状態になります。
アプリケーションに@EnableBatchProcessing
を付与したままSpring Boot 3系 × Spring Batch 5系にアップデートしてしまうと、意図せずカスタマイズ可能な状態となってしまい、
- ジョブが起動しない
-
@BatchDataSource DataSource
が使われない
という状態になってしまいます。
補足
Spring Batch 5系では、解説内に記載した設定クラスの変更に加えて、メタデータスキーマの更新など破壊的変更が多くあります。
マイグレーションガイドが提供されていますので、アップデート対応を行う際は参考にされることをおすすめします。
Discussion