チュートリアルの目的
本チュートリアルは、Macchinetta Batch 2.x 開発ガイドラインに記載されている内容について、実際にアプリケーションの開発を体験することで、 Macchinetta Batch 2.xの基本的な知識を習得することを目的としている。
対象読者
本チュートリアルはソフトウェア開発経験のあるアーキテクトやプログラマ向けに書かれており、 以下の知識があることを前提としている。
-
Spring FrameworkのDIやAOPに関する基礎的な知識がある
-
SQLに関する基礎的な知識がある
-
Javaを主体としたアプリケーションの開発経験がある
検証環境
本チュートリアルの検証を行った環境条件を以下に示す。
ソフトウェア分類 | 製品名 |
---|---|
OS |
Microsoft Windows 10 Enterprise (64bit) |
JDK |
RedHat OpenJDK 17.0.5 Windows 64-bit |
IDE |
Spring Tool Suite 4.17.1 released |
Build Tool |
Apache Maven 3.8.6 |
RDBMS |
H2 Database 2.2.224 |
フレームワークの概要
ここでは、フレームワークの概要として処理モデルの概要およびアーキテクチャの違いについて説明する。
Spring Batchについて、詳細はMacchinetta Batch 2.x 開発ガイドラインのSpring Batchのアーキテクチャを参照。
Macchinetta Batch 2.xが提供する処理モデルには、チャンクモデルとタスクレットモデルがある。
それぞれの特徴について以下に示す。
処理モデルについて、構成要素や機能的な差異を下表に示す。
項目 | チャンクモデル | タスクレットモデル |
---|---|---|
構成要素 |
ItemReader、ItemProcessor、ItemWriter、ChunkOrientedTaskletで構成される。 |
Taksletのみで構成される。 |
チャンク単位にトランザクションが発生する。トランザクション制御は一定件数ごとにトランザクションを確定する中間コミット方式のみ。 |
1トランザクションで処理する。トランザクション制御は、全件を1トランザクションで確定する一括コミット方式と中間コミット方式のいずれかを利用可能。 前者はSpring Batchが持つトランザクション制御の仕組みを利用するが、後者はユーザにてトランザクションを直接操作する。 |
|
リランおよび、ステートレスリスタート(件数ベースリスタート)、ステートフルリスタート(処理状態を判断したリスタート)が利用できる。 |
リランのみ利用することを原則とする。処理状態を判断したリスタートが利用できる。 |
|
Spring Batch提供の各種Listenerインタフェースを使うことでハンドリング処理が容易になっている。try-catchによる独自実装も可能。 |
タスクレット実装内にて独自にtry-catchを実装することが基本。ChunkListenerインタフェースの利用も可能。 |
本チュートリアルでは、基本的な機能を利用したアプリケーションについてチャンクモデル、タスクレットモデルそれぞれの実装方法を説明している。 チャンクモデル、タスクレットモデルのアーキテクチャの違いによって実装方法も異なってくるため、 ここでそれぞれの特徴をしっかり理解してから進めることを推奨する。
チュートリアルの進め方
本チュートリアルで作成するアプリケーション(ジョブ)においては、 作成済みのジョブに実装を追加して作成するジョブがあるため、作成する順序を考慮しなければならない。
本チュートリアルの読み進め方を作成するジョブの順序関係も含めて図を以下に示す。
非同期実行方式のジョブは、本チュートリアルの進め方の順序では最後のジョブとしているが、 チャンクモデルまたはタスクレットモデルで1つでもジョブを作成済みであれば、非同期実行方式のジョブを実施してもよい。
ファイルアクセスでデータ入出力を行うジョブへの追加実装について
ファイルアクセスでデータ入出力を行うジョブの説明以外は、 データベースアクセスでデータ入出力を行うジョブをもとに実装を追加したり、実行例を表示させている。 ファイルアクセスでデータ入出力を行うジョブをもとに実装を追加する場合は、読み替える必要があるため留意すること。 |