背景
とある量販店では会員に対してポイントカードを発行している。
会員には「ゴールド会員」「一般会員」の会員種別が存在し、会員種別に応じたサービスを提供している。
今回そのサービスの一環として、月内に商品を購入した会員のうち、 会員種別が「ゴールド会員」の場合は100ポイント、「一般会員」の場合は10ポイントを月末に加算することにした。
業務仕様
業務仕様を以下に示す。
- 
「月内に商品を購入した会員」は商品購入フラグで示す
- 
商品購入フラグは、"0"の場合に初期状態、"1"の場合に処理対象を表す
 
 - 
 - 
商品購入フラグが"1"(処理対象)の場合に、会員種別に応じてポイントを加算する
- 
会員種別が"G"(ゴールド会員)の場合は100ポイント、"N"(一般会員)の場合は10ポイントを加算する
 
 - 
 - 
商品購入フラグはポイント加算後に、"0"(初期状態)に更新する
 - 
ポイントの上限値は1,000,000ポイントとする
 - 
ポイント加算後に1,000,000ポイントを超えた場合は、1,000,000ポイントに補正する
 
学習コンテンツ
簡単な業務仕様のアプリケーション(ジョブ)の作成を通して、ジョブに関する様々な機能や処理方式を学習する。
なお、ジョブはタスクレットモデルとチャンクモデルをそれぞれ実装する。
各ジョブで主に学習することとそのジョブで利用する機能や処理方式を以下に示す。
| 項番 | ジョブ | 学習内容 | 
|---|---|---|
A  | 
MyBatis用のItemReaderおよびItemWriterを利用したデータベースアクセスの手法を学ぶ。  | 
|
B  | 
フラットファイルの入出力用のItemReaderおよびItemWriterを利用したファイルアクセスの手法を学ぶ。  | 
|
C  | 
Bean Validationを利用した入力チェックの手法を学ぶ。  | 
|
D  | 
リスナーとしてChunkListenerを利用した例外ハンドリングの手法を学ぶ。  | 
|
E  | 
try-catchを利用した例外ハンドリングとスキップ、およびカスタマイズした終了コードを出力する手法を学ぶ。  | 
|
F  | 
TERASOLUNA Batch 5.xが提供するDBポーリング機能を利用した非同期実行の手法を学ぶ。  | 
A~Fのジョブで利用している機能や処理方式とTERASOLUNA Batch 5.x 開発ガイドラインの説明の対応表を以下に示す。
| 項番 | 機能 | A | B | C | D | E | F | 
|---|---|---|---|---|---|---|---|
1  | 
ジョブの起動 > 起動方式 > 同期実行  | 
Chunk Tasklet  | 
Chunk Tasklet  | 
Chunk Tasklet  | 
Chunk Tasklet  | 
Chunk Tasklet  | 
|
2  | 
ジョブの起動 > 起動方式 > 非同期実行(DBポーリング)  | 
Chunk Tasklet  | 
|||||
3  | 
ジョブの起動 > ジョブの起動パラメータ > コマンドライン引数から与える  | 
Chunk Tasklet  | 
|||||
4  | 
ジョブの起動 > リスナー  | 
Chunk Tasklet  | 
Chunk Tasklet  | 
||||
5  | 
データの入出力 > トランザクション制御 > Spring Batchにおけるトランザクション制御  | 
Chunk Tasklet  | 
|||||
6  | 
データの入出力 > トランザクション制御 > 単一データソースの場合 > トランザクション制御の実施  | 
Chunk Tasklet  | 
|||||
7  | 
データの入出力 > データベースアクセス > ItemReaderにおけるデータベースアクセス  | 
Chunk  | 
|||||
8  | 
データの入出力 > データベースアクセス > ItemWriterにおけるデータベースアクセス  | 
Chunk  | 
|||||
9  | 
アプリケーション開発の流れ > タスクレットモデルジョブの作成 > チャンクモデルのコンポーネントを利用するTasklet実装  | 
Tasklet  | 
|||||
10  | 
データの入出力 > ファイルアクセス > 可変長レコード > 入力  | 
Chunk Tasklet  | 
|||||
11  | 
データの入出力 > ファイルアクセス > 可変長レコード > 出力  | 
Chunk Tasklet  | 
|||||
12  | 
異常系への対応 > 入力チェック  | 
Chunk Tasklet  | 
Chunk Tasklet  | 
||||
13  | 
異常系への対応 > 例外ハンドリング > ステップ単位の例外ハンドリング > ChunkListenerインターフェースによる例外ハンドリング  | 
Chunk Tasklet  | 
|||||
14  | 
異常系への対応 > 例外ハンドリング > ステップ単位の例外ハンドリング > チャンクモデルにおける例外ハンドリング  | 
Chunk  | 
|||||
15  | 
異常系への対応 > 例外ハンドリング > ステップ単位の例外ハンドリング > タスクレットモデルにおける例外ハンドリング  | 
Tasklet  | 
|||||
16  | 
異常系への対応 > 例外ハンドリング > 処理継続可否の決定 > スキップ  | 
Chunk Tasklet  | 
|||||
17  | 
ジョブの管理 > ジョブの状態管理 > ジョブの状態・実行結果の確認  | 
Chunk Tasklet  | 
|||||
18  | 
ジョブの管理 > 終了コードのカスタマイズ  | 
Chunk Tasklet  | 
|||||
19  | 
ジョブの管理 > ロギング  | 
Chunk Tasklet  | 
Chunk Tasklet  | 
||||
20  | 
ジョブの管理 > メッセージ管理  | 
Chunk Tasklet  | 
Chunk Tasklet  |