😇

Spring Boot 3にアップデートしたらSpring Batchが動かなくなった

2023/05/20に公開

どんな人向け?

  • 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で自動構成されます。

  1. Spring Batch 4 → 5へのアップデートでは、設定クラスに破壊的変更がありました。
  2. Spring Boot 3はこれに追従し、Spring BatchのDefaultBatchConfigurationをベースとしてカスタマイズする方式に変更しました。
  3. 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