Spring Batch 5.1 の新機能
このセクションでは、Spring Batch 5.1 の主なハイライトを示します。変更点の完全なリストについては、リリースノート [GitHub] (英語) を参照してください。
Spring Batch 5.1 には次の機能が含まれています。
さらに、このリリースでは次の実験的な機能が導入されています。
依存関係のアップグレード
このリリースでは、Spring の依存関係が次のバージョンにアップグレードされます。
Spring Framework 6.1.0
Spring Integration 6.2.0
Spring Data 3.2.0
Spring LDAP 3.2.0
Spring AMQP 3.1.0
Spring Kafka 3.1.0
Micrometer 1.12.0
仮想スレッドのサポート
JDK 21 LTS の採用は、Spring Batch 5.1 の主要テーマの 1 つであり、特に Project Loom の仮想スレッドのサポートです。このリリースでは、仮想スレッドを使用して同時ステップを実行したり、仮想スレッドを使用して複数のステップを並行して起動したりするなど、フレームワークのすべての領域で仮想スレッドを使用できます。
Spring Batch では問題の分離が適切に設計されているため、スレッドは直接管理されません。スレッド管理は、Spring Framework から TaskExecutor
実装に委譲されます。このプログラミングからインターフェースへのアプローチにより、TaskExecutor
実装を透過的かつ柔軟な方法で切り替えることができます。
Spring Framework 6.1 では、仮想スレッドに基づく新しい TaskExecutor
実装 ( VirtualThreadTaskExecutor
) が導入されました。この TaskExecutor
は、TaskExecutor
が必要な場合はどこでも Spring Batch で使用できます。
JpaItemWriter のメモリ管理の改善
JpaItemWriter
を使用する場合、チャンクサイズが十分に大きい場合、JPA 永続コンテキストは急速に大きくなる可能性があります。これを適時に適切にクリアしないと、OutOfMemoryError
エラーが発生する可能性があります。
このリリースでは、項目の各チャンクを書き込んだ後に永続コンテキストをクリアするために、clearPersistenceContext
という名前の新しいオプションが JpaItemWriter
に導入されました。このオプションは、大量のデータと大きなチャンクサイズを処理するチャンク指向のステップのメモリ管理を改善します。
アイテムのリーダーとライターのための新しい同期デコレーター
バージョン 5.0 までの Spring Batch には、スレッドアクセスを ItemStreamReader#read
および ItemStreamWriter#write
に同期するために 2 つのデコレーター SynchronizedItemStreamReader
および SynchronizedItemStreamWriter
が提供されていました。これらのデコレータは、マルチスレッドステップで非スレッドセーフな項目ストリームを使用する場合に役立ちます。
これらのデコレータは ItemStream
実装で動作しますが、非項目ストリームでは使用できません。例: これらのデコレータは、ListItemReader#read
または KafkaItemWriter#write
へのアクセスを同期するために使用できません。
ユーザーの利便性を考慮して、このリリースではアイテム以外のストリームにも新しいデコレータが導入されました。この新機能により、カスタムデコレータを作成しなくても、Spring Batch のすべてのアイテムリーダーとライターを同期できるようになりました。
新しいカーソルベースの MongoItemReader
バージョン 5.0 まで、Spring Batch によって提供される MongoItemReader
は、MongoDB の skip
操作に基づくページネーションを使用していました。これは小規模 / 中規模のデータセットではうまく機能しますが、大規模なデータセットではパフォーマンスが低下し始めます。
このリリースでは、MongoDB 用の新しいカーソルベースの項目リーダーである MongoCursorItemReader
が導入されています。この実装では、ページングの代わりにカーソルを使用して MongoDB からデータを読み取り、大規模なコレクションの読み取りパフォーマンスを向上させます。他のカーソル / ページングリーダーとの一貫性を保つために、現在の MongoItemReader
は MongoPagingItemReader
に名前変更されました。
MongoItemWriter での一括挿入のサポート
バージョン 5.0 まで、MongoItemWriter
は upsert
と delete
の 2 つの操作をサポートしていました。upsert
操作は挿入と更新の両方に対して適切に機能しますが、ターゲットコレクション内で新しいことがわかっている項目に対しては適切に機能しません。
JpaItemWriter
の persist
および merge
操作と同様に、このリリースでは、一括挿入用に設計された insert
という名前の新しい操作が MongoItemWriter
に追加されています。この新しいオプションは、アイテムがターゲットコレクションにすでに存在するかどうかを確認するために追加の検索を必要としないため、新しいアイテムに対して upsert
よりも優れたパフォーマンスを発揮します。
Redis 用新項目リーダーライター
新しい RedisItemReader
が内蔵アイテムリーダーのライブラリで利用できるようになりました。このリーダーは Spring Data Redis に基づいており、Redis から読み取るように設定されたキーをスキャンするように ScanOptions
を構成できます。
同様に、Spring Data Redis をベースにした新しい RedisItemWriter
がライターライブラリの一部になりました。このライターは、Redis に項目を書き込むように RedisTemplate
を使用して構成できます。
JobRegistryBeanPostProcessor の自動構成
Spring Batch アプリケーションで JobOperator
を設定する場合、オペレーターの JobRegistry
にジョブを登録する必要があります。この登録プロセスは手動で実行されるか、アプリケーションコンテキストに JobRegistryBeanPostProcessor
Bean を追加することによって自動的に実行されます。
このリリースでは、Spring Batch のデフォルト構成 (つまり、@EnableBatchProcessing
を使用するか DefaultBatchConfiguration
を継承することによる) により、JobRegistryBeanPostProcessor
Bean がアプリケーションコンテキストに自動的に登録されるようになりました。これにより、構成プロセスが簡素化され、JobOperator
を使用する際のユーザーエクスペリエンスが向上します。
決定を下してジョブフローを開始する機能
XML 構成スタイルを使用する場合、<decision>
要素のおかげで、ディサイダーを使用してジョブフローを開始することができます。ただし、バージョン 5.0 までは、Java API で同じフロー定義を実現することはできませんでした。
このリリースでは、JobExecutionDecider
でジョブフローを開始する新しいオプションが JobBuilder
API に追加されました。これにより、両方の構成スタイルの一貫性が高まります。
カスタム JobKeyGenerator を提供する機能
デフォルトでは、Spring Batch は、識別ジョブパラメーターの MD5 ハッシュを計算することによってジョブインスタンスを識別します。この識別プロセスをカスタマイズする必要はほとんどありませんが、Spring Batch はユーザーが JobKeyGenerator
API を通じてデフォルトのメカニズムをオーバーライドするための戦略インターフェースを提供します。
バージョン 5.0 までは、カスタム JobRepository
および JobExplorer
を作成することなくカスタムキージェネレーターを提供することはできませんでした。このバージョンでは、JobRepository
および JobExplorer
のファクトリ Bean を通じてカスタム JobKeyGenerator
を提供できるようになりました。
Antora に基づく新しいドキュメント
リファレンスドキュメントは Antora (英語) を使用するように更新されました。このアップデートでは、以下を含むがこれらに限定されない多くの改善が導入されています。
マルチバージョンのドキュメント: 左側のメニューのドロップダウンバージョンリストにより、あるバージョンから別のバージョンに移動できるようになりました。
統合された検索エクスペリエンス: Algolia (英語) を利用し、ページの左上に統合された検索ボックスのおかげで検索エクスペリエンスが向上しました。
設定スタイルの切り替えの改善: コードスニペットの XML 構成スタイルと Java 構成スタイルを切り替えるトグルが、各ページの上部ではなく、各サンプルの近くに配置されるようになりました。
開始エクスペリエンスの向上
このリリースでは、開始時のエクスペリエンスがさまざまな方法で改善されました。
サンプルは機能ごとにパッケージ化され、XML 構成と Java 構成の 2 つの構成スタイルで提供されます。
新しい 2 分間のチュートリアル [GitHub] (英語) が README に追加されました
入門ガイドは最新かつ最高の Spring Batch および Spring Boot バージョンに更新されました
課題報告ガイド [GitHub] (英語) は、課題を簡単に報告できるように、詳細な手順とプロジェクトテンプレートを追加して更新されました。
MongoDB ジョブリポジトリ (実験用)
この機能では、MongoDB によってサポートされる JobRepository
および JobExplorer
の新しい実装が導入されます。この待望の機能は実験版として利用可能になり、Spring Batch 用の最初の NoSQL メタデータストアの導入を示します。
この機能の詳細については、Spring Batch 実験版 [GitHub] (英語) リポジトリを参照してください。
複合アイテムリーダー (実験用)
この機能では、複合 ItemReader
実装が導入されます。CompositeItemProcessor
および CompositeItemWriter
と同様に、このアイデアは、読み取りを順番にアイテムリーダーのリストに委譲することです。これは、異なるソース (ファイル、データベースなど) から同じ形式のデータを読み取る必要がある場合に便利です。
この機能の詳細については、Spring Batch 実験版 [GitHub] (英語) リポジトリを参照してください。
新しいチャンク指向ステップの実装 (実験用)
これは新しい機能ではなく、チャンク指向の処理モデルの新しい実装です。ゴールは、現在の実装で報告されている課題に対処し、今後の再設計された同時実行モデルの新しいベースを提供することです。
この新しい実装の詳細については、Spring Batch 実験版 [GitHub] (英語) リポジトリを参照してください。