Macchinetta Batch Framework (2.x) Development Guideline
Macchinetta Batch Framework (2.x) Development Guideline - version 2.6.1.RELEASE, 2026-3-30
> INDEX

# 同期実行

## Overview

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

図 1. 同期実行の概要
図 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`形式となる。 |

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

JavaConfig
コマンドプロンプトでの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();
    }

XMLConfig
コマンドプロンプトでの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`に沿って、起動引数を渡す。 ここでは、`jobPath`と`jobIdentifier`としてジョブ名の2つを指定している。

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

JavaConfig
コマンドプロンプトでの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)

XMLConfig
コマンドプロンプトでの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=server1`と`outputFile=/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.6.1.RELEASE, 2026-3-30
> INDEX