目次 > 第2章 バッチフレームワークチュートリアル > 2.4 分割ジョブ > 2.4.2 ジョブ分割の準備
2.4.2 ジョブ分割の準備
本節では、ジョブを分割するため手順について説明する。
設計情報例
ジョブ定義例
手順
1. “JB0003JobContext.java”の作成
親ジョブのジョブコンテキストを作成する。
子ジョブのジョブコンテキストである“JB0001JobContext”は親ジョブのジョブコンテキストから生成される。
このとき、子ジョブのジョブコンテキストにジョブIDや分割キー等のパラメータを設定する。
- パッケージエクスプローラビューで、“sources”パッケージを右クリックする。
- 「新規」→「クラス」を選択し、パッケージに“jp.terasoluna.batch.tutorial.uc0001”、名前に“JB0003JobContext”を入力し、「終了」を押下する。
- “JB0003JobContext.java”を以下のように作成する。
/*
* Copyright (c) 2007 NTT DATA Corporation
*
*/
package jp.terasoluna.batch.tutorial.uc0001;
import jp.terasoluna.fw.batch.openapi.JobContext;
/**
* 親ジョブ用ジョブコンテキスト。
*/
public class JB0003JobContext extends JB0001JobContext {
/**
* Serializable用バージョンID。
*/
private static final long serialVersionUID = 311742479171997186L;
/**
* 子ジョブ用のジョブコンテキストを作成し、返す。
* @param partitionKey 分割キー
* @return 子ジョブのジョブコンテキスト
*/
@Override
public JobContext getChildJobContext(Object partitionKey) {
//子ジョブ用のジョブコンテキストを作成する
JB0001JobContext childJobContext = new JB0001JobContext();
childJobContext.setJobId(super.getJobId());
childJobContext.setJobRequestNo(super.getJobRequestNo());
childJobContext.setRestarted(super.isRestarted());
childJobContext.setStartType(super.getStartType());
childJobContext.setUnyohiduke(super.getUnyohiduke());
//分割キーを設定する
childJobContext.setPartitionKey((String)partitionKey);
return childJobContext;
}
}
2. “UC0001_sqlMap.xml”の編集
分割キー毎に対象データを取得するSQLを定義する。
WHERE句には分割キーが使用されるため、“parameterClass”には“JB0001JobContext”を指定する。
“resultClass”には「2.2 データベースアクセス機能を用いた単純なジョブ」と同様、ビジネスロジックの入力パラメータとなる“JB0001Data”を指定する。
<select id="getPartitionNyukinData" parameterClass="jp.terasoluna.batch.tutorial.uc0001.JB0001JobContext"
resultClass="jp.terasoluna.batch.tutorial.uc0001.JB0001Data">
SELECT ID, SITEN, KOKYAKUID, NYUKIN, TORIHIKIBI FROM NYUKINTABLE WHERE SITEN = #partitionKey# ORDER BY ID
</select>
3. “JB0003.xml”の編集
“JB0003”に分割キー取得処理の定義を追加する。
- ジョブコンテキストの設定
“JB0003.xml”のジョブコンテキストの定義を、手順2で作成した親ジョブのジョブコンテキスト“JB0003JobContext”に変更する。
<bean id="jobContext" class="jp.terasoluna.batch.tutorial.uc0001.JB0001JobContext" />の定義を以下のように修正する。<!-- ジョブコンテキスト --> <bean id="jobContext" class="jp.terasoluna.batch.tutorial.uc0001.JB0003JobContext" />
- 分割キー取得用コレクターの設定
分割キー取得用コレクター定義を追加する。
“dataArray”には分割キー“東京”“大阪”“福岡”を定義する。以下の定義を<beans></beans>内に追加する。<!-- ジョブ分割キーのコレクター --> <bean id="partitionkeyCollector" parent="stringArrayPropertyPartitionKeyCollector"> <property name="dataArray" value="東京,大阪,福岡" /> </bean>“partitionkeyCollector”はBatch版が規定する固定のBeanIDであり、“stringArrayPropertyPartitionKeyCollector”はBatch版が規定する文字列配列用の分割キー取得コレクターBeanである。
- 対象データ取得用コレクターの設定
最後に、分割キー毎に対象データを取得するため“collector”Bean定義を以下のように修正する。
手順3で定義した分割キー毎に対象データを取得するSQLを“sql”プロパティに設定する。<!-- 対象データ取得処理 --> <bean id="collector" parent="IBatisDbChunkCollector"> <property name="sql" value="UC0001.getPartitionNyukinData" /> </bean>
参考資料
- 『BD-01 ビジネスロジック実行機能』
- 『BD-02 対象データ取得機能』