PR:この記事にはアフィリエイトリンクが含まれます。
Spring BatchをJavaで使うとき、早い段階で悩むのがchunkとtaskletの境目です。まず処理を動かし、その先の失敗時にどう再実行するかまで設計できて、実務で扱いやすいバッチになります。
本を探すときは現行APIのコード例に目が行きますよね。ただ、JobとStepの役割やトランザクション、再開の仕組みも一緒に理解できる本なら、設計時に参照しやすいもの。まず扱う範囲を一覧します。
本の早見表
| 書籍 | 軸になる内容 | 刊行・版 | 価格目安 |
|---|---|---|---|
The Definitive Guide to Spring Batch: Modern Finite Batch Processing in the Cloud | Job、Step、Reader・Processor・Writer、スケーリング、テスト | 2019年・第2版、Spring Batch 4 | — |
Spring Batch in Action | Tasklet、Chunk、Skip・Retry・Restart、トランザクション | 2011年刊、英語 | — |
[改訂新版]Spring入門――Javaフレームワーク・より良い設計とアーキテクチャ | Spring全体の設計と、第9章のSpring Batch | 2016年刊、Spring Framework 4対応 | 定価4,180円(税込) |
Spring Batchの構成要素を広く押さえたい人にはApressの第2版をすすめます。再実行やエラー制御を重点的に学ぶならSpring Batch in Actionが役立ちます。どちらも英語書籍なので、英語の技術書に慣れているかも判断材料になります。
Spring全体の設計を日本語で学びたい人には技術評論社の『Spring入門』をすすめます。定価は4,180円(税込)で、実売価格は販売店や時期によって変わります。
本ごとに刊行時期と対応バージョンは異なります。現行プロジェクトでAPIを使う際は、処理の分割や再実行の考え方を本でつかみ、手元のSpring Batchに合う設定を確認してください。
実務の起点
Spring Batchは決まった時刻に大量データを流す用途に加え、進捗の記録や失敗箇所からの再開にも使えます。一定件数ごとにデータを確定することも可能です。こうした機能は実務で頼りになります。
たとえば、毎晩の売上データを読み込み、項目を整えて集計テーブルに書き込むバッチを考えましょう。途中でデータベースが停止しても、完了済みの範囲から再開できれば、全件再処理の負荷や二重登録を抑えられます。
Job全体と各Stepの責任を定め、入力・加工・出力の境界をはっきりさせます。失敗時の扱いも先に決めておけば、chunkとtaskletの構成や運用手順に一貫性が出ます。
Chunkの役割
Chunk指向のStepではItemReaderがデータを読みます。必要ならItemProcessorが加工し、ItemWriterがまとめて出力します。設定件数ごとにトランザクションを確定するのが基本です。
1件ずつコミットすれば、未確定分は小さくなります。そのぶん確定処理は増えるでしょう。100件単位では性能が上がる場合もありますが、失敗時にはそのまとまりを再処理します。レコード数と負荷の釣り合いを見て設定しましょう。
チャンクサイズは件数だけで決めず、レコードの重さや外部APIの応答時間とDBへの負荷も考慮します。大きなファイルを一度にメモリへ載せず、一定数ずつ読み出せる点もChunk処理の利点です。
注意したいのがWriterからメールを送るなど、DBトランザクションと一緒には取り消せない処理です。再試行で同じ通知を送る恐れがあるため、送信済みを識別するキーなど重複を抑える仕組みを用意しておきましょう。
Taskletの役割
TaskletはStep内でひとまとまりの仕事を実行する方式です。作業用ファイルの削除や単純なストアドプロシージャの呼び出し、開始時の準備など、レコードを一件ずつ読み書きしない仕事に使えます。
使い分けは処理件数より仕事の形で判断します。Chunkは読み取りから書き込みまでの反復と確定単位を表し、Taskletは一度の呼び出しで行う仕事のまとまりを表します。
入力ファイルを検査して別の領域へ移す作業なら、Taskletで表せます。数百万行の検証とDB登録にはChunkが扱いやすく、巨大なTasklet一つにまとめると進捗や再開位置を見失いがちです。
Stepが短くても、再実行時の影響は確認しましょう。ファイル削除や外部処理を繰り返して問題がないか、完了と判定する条件まで事前に定めてください。
再実行を考える
JobRepositoryにはJobやStepの実行履歴、状態、実行時の情報が記録されます。Job失敗後の再起動では、これらのメタデータから再開対象のStepやチェックポイントを判断します。
JobInstanceはJob名と識別対象のJobParametersで区別します。同じ業務日を示すパラメータで失敗したJobを再実行すれば、同一の処理単位として再開できます。実行時刻のように毎回変わる値を識別対象にすると、新しいJobInstanceとして最初から動くことがあります。
ItemStreamに対応するReaderなどがExecutionContextへ進捗を保存すると、Chunkのチェックポイントが機能します。再起動後に同じ位置から続けるため、状態を保存・復元できるReader設定とJobRepositoryの保存先を確認してください。
実行履歴を記録しても、業務データの重複までは防げません。DB書き込みに一意制約を設けたりUpsertで冪等性を保ったりするほか、対象期間やファイルも記録しましょう。同じ入力を再処理しても結果が崩れない形が堅実です。
失敗を分ける
まず失敗の性質を確かめます。ネットワークの瞬断やDB接続の一時障害にはRetryを検討しますが、形式不正のレコードは読み直しても直りません。
Skipは設定した条件と上限の範囲でレコードを飛ばす仕組みです。対象をログや隔離テーブルに残せば、後で原因を調べながらバッチを進められる場合があります。重要な業務データまで無条件に読み飛ばすのは避けたいですね。
Retryは同じ実行中に一時エラーからの回復を試みる仕組みで、Restartは失敗したJobを記録済みの状態から再開する仕組みです。障害ごとに運用手順を用意すれば、担当者も判断しやすくなります。
英語の体系書
Apressの『The Definitive Guide to Spring Batch: Modern Finite Batch Processing in the Cloud』は2019年刊の第2版で、465ページです。Spring Batch 4を軸に、JobとStepやJobRepositoryを解説します。メタデータとJob実行の仕組みも扱っています。
ItemReader・ItemProcessor・ItemWriterに加えて、スケーリングやクラウドネイティブなバッチ、テストも取り上げます。Java・Spring経験者が構成全体と運用のつながりを学ぶ際に役立つ本です。
Java 9、Spring Framework 5、Spring Boot 2に関連する内容です。Spring Batch 5や6の環境では、設定方法とAPIの差を確認してください。Job設計やReader・Writerの役割を学ぶ本としても参照できます。
再実行の専書
『Spring Batch in Action』は2011年刊の英語書籍で、504ページです。第1章ではTasklet、第5〜7章ではChunk処理の読み取り・処理・書き込みを扱います。
第8章でSkip、Retry、失敗後のRestartを学び、第9章ではTaskletとChunk指向Stepのトランザクションを扱います。エラー処理や確定範囲に触れながら再実行を学べる構成です。
2011年刊です。現行のJava設定APIの写経には使いづらいものの、概念や設計の差を学ぶ用途に活用できます。ChunkとTaskletの設計や障害時の考え方を確認する際にも参照できます。
日本語の入門書
技術評論社の『[改訂新版]Spring入門――Javaフレームワーク・より良い設計とアーキテクチャ』は2016年刊、432ページの日本語書籍です。Spring Framework 4に対応し、第9章でSpring Batchとサンプルを扱います。
第4章ではビジネスロジック層のトランザクションとトランザクションマネージャを扱います。バッチ設定とあわせて、Springアプリケーション全体の処理やトランザクションを学べる構成です。
2016年刊のSpring Framework 4対応書として、Springの基礎を日本語で学ぶ入口に使えます。現行Spring BatchのAPIはプロジェクトの版に沿って確認してください。希望小売価格は4,180円(税込)で、実売価格は時期や販売店により変わります。
結論
Spring Batchの本を実務で活かすなら、ChunkとTaskletの役割に加え、コミット単位やJobParametersも押さえましょう。チェックポイントと冪等性まで考えると、失敗後の動きに設計の差が表れます。
体系を広く学ぶ人にはApress第2版が有力です。Restartやトランザクションを掘り下げる読者には『Spring Batch in Action』を、日本語でSpring全体を学ぶ人には『Spring入門』をすすめます。どの本も刊行時のバージョンを確かめ、現行APIとの差を補いながら読み進めてください。
まず業務で障害が起きやすい箇所を一つ取り上げ、再実行時に同じデータがどう扱われるかを確かめます。Chunkの確定範囲とJobRepositoryの記録を照らすと、Spring Batchが運用を支える基盤として理解できます。
Amazon の PC をスコア化してみた
Amazonにある8〜14インチの小型WindowsタブレットやノートPCを、スペック別にスコア化して比較・ランキング。


![[改訂新版]Spring入門――Javaフレームワーク・より良い設計とアーキテクチャ](https://m.media-amazon.com/images/I/51vLPv7A-TL._SL500_.jpg)

