目次 > 第2章 バッチフレームワークチュートリアル > 2.4 分割ジョブ > 2.4.2 ジョブ分割の準備

2.4.2 ジョブ分割の準備

本節では、ジョブを分割するため手順について説明する。

設計情報例

ジョブ定義例

分割キー取得

手順

1. “JB0003JobContext.java”の作成

親ジョブのジョブコンテキストを作成する。
子ジョブのジョブコンテキストである“JB0001JobContext”は親ジョブのジョブコンテキストから生成される。
このとき、子ジョブのジョブコンテキストにジョブIDや分割キー等のパラメータを設定する。

  1. パッケージエクスプローラビューで、“sources”パッケージを右クリックする。
  2. 「新規」→「クラス」を選択し、パッケージに“jp.terasoluna.batch.tutorial.uc0001”、名前に“JB0003JobContext”を入力し、「終了」を押下する。
  3. “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 対象データ取得機能』

次項:2.4.3 起動と確認

Copyright (C) 2007-2011 NTT DATA CORPORATION