Spring Batch Architecture

Applicationレイアー
- all batch jobs
- custom code by developers
Batch Coreレイアー
- バッチジョブの起動
- バッチジョブの制御
JobLauncher,Job,Stepの実装
Batch Infrastructureレイアー
- common readers
- such as ItemReader
- common writers
- such as ItemWriter
- services
- such as the RetryTemplate
- core framework
Spring Batchの概念

JobRepository
-
JobやStepの実行状況や実行結果を保存しておくところ。
-
管理情報は、SpringBatchが規程するテーブルスキーマを元にデータベース上に永続化される。
Entityクラス テーブル名 説明 JobExecution BATCH_JOB_EXECUTION ジョブの状態・実行結果の保持する。1回のジョブ実行 JobExecutionContext BATCH_JOB_EXECUTION ジョブ内部のコンテキストを保持する。1回のジョブ実行 JobExecutionParams BATCH_JOB_EXECUTION_PARAMS 起動時に当られたジョブパラメータを保持する。1回のジョブ実行 StepExecution BATCH_STEP_EXECUTION ステップの状態・実行結果、コミット・ロールバック件数を保持する。1回のステップ実行 StepExecutionContext BATCH_STEP_EXECUTION_CONTEXT ステップ内部のコンテキストを保持する。1回のステップ実行 JobInstance BATCH_JOB_INSTANCE ジョブ名、及びジョブパラメータをシリアライズした文字列を保持する。ジョブ名とジョブパラメータの組み合わせ -
上記のテーブル手動で作るが必要です。
-
@EnableBatchProcessingannotation利用すると、frameworkからJobRepositoryを提供します。 -
カスタマイズの場合、
BatchConfigurerインターフェースをimplementsしてカスタマイズができます。
JobLauncher
- ジョブを起動するためのインタフェース。
- 基も基本的な実装は
SimpleJobLauncherです.注意: Httpリクエストから起動しようとする時、SimpleJobLauncherが呼び出し元にすぐに戻るように、起動を非同期で行う必要がありあります。
Job
- SpringBatchにおけるバッチアップリケーションの一連の処理をまとめた1実行単位。
- ジョブの実行
JobLauncher一つとjob一つが必要です。
Step
- ジョブを構成する処理の単位。1つのジョブに1~N個のStepを持たせることが可能です。
- 一つのジョブを複数のStepに分割して処理することにより、処理の再利用、並列化、条件分岐が可能です。
- チャンクモデルまだタスクレットモデルのいずれがで実装する。
ItemReader,ItemProcessor,ItemWriter
チャンクモデルを実装する際に、データの入力/加工/出力の三つに分割するためのインタフェース。タスクレットモデルでは,タスクレット内に入出力、入力チェック、ビジネスロジックのすべてを実装する必要がある。
Listener
-
Job、Step、ItemReader、ItemProcessor、ItemWriter各段階の実行状況について、Listenerで監視ができます。 -
利用頻度が高いのは下記の二つです。
JobListener: ジョブの実行に対して処理を挟み込むためのインターフェースStepListener: ステップの実行に対して処理を挟み込むためのインターフェース
-
その他のリスナー
ChunkListener、ItemReadListener、ItemProcessListener、ItemWriteListener
-
リスナーの実装
- 各種リスナーインターフェースをimplementsして実装する。
- 各種リスナーインターフェースに対応したアノテーションを付与する。
リスナーインターフェース アノテーション JobExecutionListener @beforeJob@afterJob StepExecutionListener @BeforeStep@AfterStep ChunkListener @BeforeChunk@AfterChunk@afterChunkError ItemReadListener @BeforeRead@AfterRead@OnReadError ItemProcessListener @beforeProcess@afterProcess@onProcessError ItemWriteListener @BeforeWrite@AfterWrite@OnWriteError