Overview

同期実行について説明する。 同期実行とは、ジョブスケジューラなどによりシェルを介して新規プロセスとして起動し、ジョブの実行結果を呼び出し元に返却する実行方法である。

overview of sync job
同期実行の概要
sequence of sync job
同期実行の流れ

本機能は、チャンクモデルとタスクレットモデルとで同じ使い方になる。

How to use

CommandLineJobRunnerによってジョブを起動する方法を説明する。

なお、アプリケーションのビルドや実行については、プロジェクトの作成を参照のこと。 また、起動パラメータの指定方法や活用方法については、ジョブの起動パラメータを参照のこと。 これらと本節の説明は一部重複するが、同期実行の要素に注目して説明する。

実行方法

TERASOLUNA Batch 5.xにおいて、同期実行は Spring Batch が提供するCommandLineJobRunnerによって実現する。 CommandLineJobRunnerは、以下の要領にてjavaコマンドを発行することで起動する。

CommandLineJobRunnerの構文
$ java org.springframework.batch.core.launch.support.CommandLineJobRunner <jobPath> <options> <jobIdentifier> <jobParameters>
引数にて指定する項目
指定する項目 説明 必須

jobPath

起動するジョブの設定を記述したBean定義ファイルのパス。classpathからの相対パスにて指定する。

options

起動する際の各種オプション(停止、リスタートなど)を指定する。

jobIdentifier

ジョブの識別子として、Bean定義上のジョブ名、もしくはジョブを実行後のジョブ実行IDを指定する。 通常はジョブ名を指定する。ジョブ実行IDは停止やリスタートの際にのみ指定する。

jobParameters

ジョブの引数を指定する。指定はkey=value形式となる。

以下に、必須項目のみを指定した場合の実行例を示す。

CommandLineJobRunnerの実行例1
$ java -cp 'target/archetypeId-version.jar:lib/*' \ # (1)
    org.springframework.batch.core.launch.support.CommandLineJobRunner \ # (2)
    META-INF/jobs/job01.xml job01 # (3)
Bean定義の設定(抜粋)
<batch:job id="job01" job-repository="jobRepository"> <!-- (3) -->
    <batch:step id="job01.step01">
        <batch:tasklet transaction-manager="jobTransactionManager">
            <batch:chunk reader="employeeReader"
                         processor="employeeProcessor"
                         writer="employeeWriter" commit-interval="10" />
        </batch:tasklet>
    </batch:step>
</batch:job>
設定内容の項目一覧
項番 説明

(1)

javaコマンドを実行する際に、バッチアプリケーションのjarと、依存するjarをclasspathに指定する。 ここではコマンド引数で指定しているが、環境変数等を用いてもよい。

(2)

起動するクラスに、CommandLineJobRunnerをFQCNで指定する。

(3)

CommandLineJobRunnerに沿って、起動引数を渡す。 ここでは、jobPathjobIdentifierとしてジョブ名の2つを指定している。

次に、任意項目として起動パラメータを指定した場合の実行例を示す。

CommandLineJobRunnerの実行例2
$ java -cp 'target/archetypeId-version.jar:lib/*' \
    org.springframework.batch.core.launch.support.CommandLineJobRunner \
    META-INF/jobs/setupJob.xml setupJob target=server1 outputFile=/tmp/result.csv # (1)
設定内容の項目一覧
項番 説明

(1)

ジョブの起動パラメータとして、target=server1outputFile=/tmp/result.csvを指定している。

任意オプション

CommandLineJobRunnerの構文で示した任意のオプションについて補足する。

CommandLineJobRunnerでは以下の4つの起動オプションが使用できる。 ここでは個々の説明は他に委ねることとし、概要のみ説明する。

-restart

失敗したジョブを再実行する。詳細は、処理の再実行を参照のこと。

-stop

実行中のジョブを停止する。詳細は、ジョブの管理を参照のこと。

-abandon

停止されたジョブを放棄する。放棄されたジョブは再実行不可となる。 TERASOLUNA Batch 5.xでは、このオプションを活用するシーンがないため、説明を割愛する。

-next

過去に一度実行完了したジョブを再度実行する。ただし、TERASOLUNA Batch 5.xでは、このオプションを利用しない。
なぜなら、TERASOLUNA Batch 5.xでは、Spring Batchのデフォルトである「同じパラメータで起動したジョブは同一ジョブとして認識され、同一ジョブは1度しか実行できない」 という制約を回避しているためである。
詳細はパラメータ変換クラスについてにて説明する。
また、本オプションを利用するには、JobParametersIncrementerというインターフェースの実装クラスが必要だが、 TERASOLUNA Batch 5.xでは設定を行っていない。
そのため、本オプションを指定して起動すると、必要なBean定義が存在しないためエラーとなる。