目次 > 第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 対象データ取得機能』