Macchinetta Batch Framework (2.x) Development Guideline - version 2.2.0.RELEASE, 2020-6-29
> INDEX

背景

とある量販店では会員に対してポイントカードを発行している。
会員には「ゴールド会員」「一般会員」の会員種別が存在し、会員種別に応じたサービスを提供している。
今回そのサービスの一環として、月内に商品を購入した会員のうち、 会員種別が「ゴールド会員」の場合は100ポイント、「一般会員」の場合は10ポイントを月末に加算することにした。

処理概要

会員種別に応じてポイント加算を行うアプリケーションを月次バッチ処理としてMacchinetta Batch 2.xを使用して実装する。

業務仕様

業務仕様を以下に示す。

  • 「月内に商品を購入した会員」は商品購入フラグで示す

    • 商品購入フラグは、"0"の場合に初期状態、"1"の場合に処理対象を表す

  • 商品購入フラグが"1"(処理対象)の場合に、会員種別に応じてポイントを加算する

    • 会員種別が"G"(ゴールド会員)の場合は100ポイント、"N"(一般会員)の場合は10ポイントを加算する

  • 商品購入フラグはポイント加算後に、"0"(初期状態)に更新する

  • ポイントの上限値は1,000,000ポイントとする

  • ポイント加算後に1,000,000ポイントを超えた場合は、1,000,000ポイントに補正する

学習コンテンツ

簡単な業務仕様のアプリケーション(ジョブ)の作成を通して、ジョブに関する様々な機能や処理方式を学習する。
なお、ジョブはタスクレットモデルとチャンクモデルをそれぞれ実装する。
各ジョブで主に学習することとそのジョブで利用する機能や処理方式を以下に示す。

表 1. チュートリアルで作成するジョブ
項番 ジョブ 略称 学習内容

1

データベースアクセスでデータ入出力を行うジョブ

DB

MyBatis用のItemReaderおよびItemWriterを利用したデータベースアクセスの手法を学ぶ。

2

ファイルアクセスでデータ入出力を行うジョブ

FL

フラットファイルの入出力用のItemReaderおよびItemWriterを利用したファイルアクセスの手法を学ぶ。

3

入力データの妥当性検証を行うジョブ

VL

Bean Validationを利用した入力チェックの手法を学ぶ。

4

ChunkListenerで例外ハンドリングを行うジョブ

CL

リスナーとしてChunkListenerを利用した例外ハンドリングの手法を学ぶ。

5

try-catchで例外ハンドリングを行うジョブ

TC

try-catchを利用した例外ハンドリングとスキップ、およびカスタマイズした終了コードを出力する手法を学ぶ。

6

非同期実行方式のジョブ

AS

Macchinetta Batch 2.xが提供するDBポーリング機能を利用した非同期実行の手法を学ぶ。

チュートリアルで作成するジョブで利用している機能や処理方式とMacchinetta Batch 2.x 開発ガイドラインの説明の対応表を以下に示す。

なお、以下の対応表ではチャンクモデルをC、タスクレットモデルをTとしている。

表 2. チュートリアルで作成するジョブとMacchinetta Batch 2.x 開発ガイドラインの説明の対応表
項番 機能 DB FL VL CL TC AS

1

ジョブの起動 > 起動方式
> 同期実行

C/T

C/T

C/T

C/T

C/T

-

2

ジョブの起動 > 起動方式
> 非同期実行(DBポーリング)

-

-

-

-

-

C/T

3

ジョブの起動 > ジョブの起動パラメータ
> コマンドライン引数から与える

-

C/T

-

-

-

-

4

ジョブの起動
> リスナー

-

-

-

C/T

C/T

-

5

データの入出力 > トランザクション制御
> Spring Batchにおけるトランザクション制御

C/T

-

-

-

-

-

6

データの入出力 > トランザクション制御 > 単一データソースの場合
> トランザクション制御の実施

C/T

-

-

-

-

-

7

データの入出力 > データベースアクセス
> 入力

C/T

-

-

-

-

-

8

データの入出力 > データベースアクセス
> 出力

C/T

-

-

-

-

-

9

データの入出力 > ファイルアクセス > 可変長レコード
> 入力

-

C/T

-

-

-

10

データの入出力 > ファイルアクセス > 可変長レコード
> 出力

-

C/T

-

-

-

-

11

異常系への対応
> 入力チェック

-

-

C/T

-

C/T

-

12

異常系への対応 > 例外ハンドリング > ステップ単位の例外ハンドリング
> ChunkListenerインタフェースによる例外ハンドリング

-

-

-

C/T

-

-

13

異常系への対応 > 例外ハンドリング > ステップ単位の例外ハンドリング
> チャンクモデルにおける例外ハンドリング

-

-

-

-

C

-

14

異常系への対応 > 例外ハンドリング > ステップ単位の例外ハンドリング
> タスクレットモデルにおける例外ハンドリング

-

-

-

-

T

-

15

異常系への対応 > 例外ハンドリング > 処理継続可否の決定
> スキップ

-

-

-

-

C/T

-

16

ジョブの管理
> ジョブの状態管理 > ジョブの状態・実行結果の確認

-

-

-

-

-

C/T

17

ジョブの管理
> 終了コードのカスタマイズ

-

-

-

-

C/T

-

18

ジョブの管理
> ロギング

-

-

-

C/T

C/T

-

19

ジョブの管理
> メッセージ管理

-

-

-

C/T

C/T

-

Macchinetta Batch Framework (2.x) Development Guideline - version 2.2.0.RELEASE, 2020-6-29