Macchinetta Batch Framework (2.x) Development Guideline - version 2.5.0.RELEASE, 2024-3-28
> INDEX

Overview

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

overview of sync job
図 1. 同期実行の概要
sequence of sync job
図 2. 同期実行の流れ

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

利用前提

ジョブの実行結果を呼び出しもとに返却するため、JobRepositoryを前提とした再処理(処理の再実行を参照)を 利用しない限りJobRepositoryによるジョブの実行状況および結果の参照は必須ではない。 そのため、JobRepositoryに永続化が不要なインメモリデータベースをデフォルトで使用することを前提とする。

How to use

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

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

実行方法

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

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

jobPath

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

options

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

jobIdentifier

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

jobParameters

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

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

コマンドプロンプトでのCommandLineJobRunnerの実行例
C:\xxx>java -cp "target\[artifactId]-[version].jar;lib\*" ^   # (1)
    org.springframework.batch.core.launch.support.CommandLineJobRunner ^ # (2)
    xxxxxx.yyyyyy.zzzzzz.projectName.jobs.Job01Config job01 # (3)
BashでのCommandLineJobRunnerの実行例
$ java -cp 'target/[artifactId]-[version].jar:lib/*' \ # (1)
    org.springframework.batch.core.launch.support.CommandLineJobRunner \ # (2)
    xxxxxx.yyyyyy.zzzzzz.projectName.jobs.Job01Config job01 # (3)
Bean定義の設定(抜粋)
@Bean
public Step step01(JobRepository jobRepository,
                   @Qualifier("jobTransactionManager") PlatformTransactionManager transactionManager,
                   ListItemReader<Employee> employeeReader,
                   EmployeeProcessor employeeProcessor,
                   FlatFileItemWriter<Employee> employeeWriter) {
    return new StepBuilder("job01.step01",
            jobRepository)
            .<Employee, Employee> chunk(10, transactionManager)
            .reader(employeeReader)
            .processor(employeeProcessor)
            .writer(employeeWriter)
            .build();
}

@Bean
public Job job01(JobRepository jobRepository,
                                        Step step01) {
    return new JobBuilder("job01",jobRepository)
            .start(step01)
            .build();
}
コマンドプロンプトでのCommandLineJobRunnerの実行例
C:\xxx>java -cp "target\[artifactId]-[version].jar;lib\*" ^   # (1)
    org.springframework.batch.core.launch.support.CommandLineJobRunner ^ # (2)
    META-INF/jobs/job01.xml job01 # (3)
BashでのCommandLineJobRunnerの実行例
$ java -cp 'target/[artifactId]-[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>
表 2. 設定内容の項目一覧
項番 説明

(1)

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

(2)

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

(3)

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

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

コマンドプロンプトでのCommandLineJobRunnerの実行例
C:\xxx>java -cp "target\[artifactId]-[version].jar;lib\*" ^
    org.springframework.batch.core.launch.support.CommandLineJobRunner ^
    xxxxxx.yyyyyy.zzzzzz.projectName.jobs.SetupJobConfig setupJob target=server1 outputFile=/tmp/result.csv # (1)
BashでのCommandLineJobRunnerの実行例
$ java -cp 'target/[artifactId]-[version].jar:lib/*' \
    org.springframework.batch.core.launch.support.CommandLineJobRunner \
    xxxxxx.yyyyyy.zzzzzz.projectName.jobs.SetupJobConfig setupJob target=server1 outputFile=/tmp/result.csv # (1)
コマンドプロンプトでのCommandLineJobRunnerの実行例
C:\xxx>java -cp "target\[artifactId]-[version].jar;lib\*" ^
    org.springframework.batch.core.launch.support.CommandLineJobRunner ^
    META-INF/jobs/setupJob.xml setupJob target=server1 outputFile=/tmp/result.csv # (1)
BashでのCommandLineJobRunnerの実行例
$ java -cp 'target/[artifactId]-[version].jar:lib/*' \
    org.springframework.batch.core.launch.support.CommandLineJobRunner \
    META-INF/jobs/setupJob.xml setupJob target=server1 outputFile=/tmp/result.csv # (1)
表 3. 設定内容の項目一覧
項番 説明

(1)

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

任意オプション

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

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

-restart

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

-stop

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

-abandon

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

-next

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

Macchinetta Batch Framework (2.x) Development Guideline - version 2.5.0.RELEASE, 2024-3-28