Overview
同期実行について説明する。 同期実行とは、ジョブスケジューラなどによりシェルを介して新規プロセスとして起動し、ジョブの実行結果を呼び出しもとに返却する実行方法である。
本機能は、チャンクモデルとタスクレットモデルとで同じ使い方になる。
利用前提
ジョブの実行結果を呼び出しもとに返却するため、JobRepository
を前提とした再処理(処理の再実行を参照)を
利用しない限りJobRepository
によるジョブの実行状況および結果の参照は必須ではない。
そのため、JobRepository
に永続化が不要なインメモリデータベースをデフォルトで使用することを前提とする。
How to use
CommandLineJobRunner
によってジョブを起動する方法を説明する。
なお、アプリケーションのビルドや実行については、プロジェクトの作成を参照。 また、起動パラメータの指定方法や活用方法については、ジョブの起動パラメータを参照。 これらと本節の説明は一部重複するが、同期実行の要素に注目して説明する。
実行方法
Macchinetta Batch 2.xにおいて、同期実行は Spring Batch が提供するCommandLineJobRunner
によって実現する。
CommandLineJobRunner
は、以下の要領にてjavaコマンドを発行することで起動する。
$ java org.springframework.batch.core.launch.support.CommandLineJobRunner <jobPath> <options> <jobIdentifier> <jobParameters>
指定する項目 | 説明 | 必須 |
---|---|---|
jobPath |
起動するジョブの設定を記述したBean定義ファイルのパス。classpathからの相対パスにて指定する。 |
|
options |
起動する際の各種オプション(停止、リスタートなど)を指定する。 |
|
jobIdentifier |
ジョブの識別子として、Bean定義上のジョブ名、もしくはジョブを実行後のジョブ実行IDを指定する。 通常はジョブ名を指定する。ジョブ実行IDは停止やリスタートの際にのみ指定する。 |
|
jobParameters |
ジョブの引数を指定する。指定は |
以下に、必須項目のみを指定した場合の実行例を示す。
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)
$ 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
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();
}
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)
$ java -cp 'target/[artifactId]-[version].jar:lib/*' \ # (1)
org.springframework.batch.core.launch.support.CommandLineJobRunner \ # (2)
META-INF/jobs/job01.xml job01 # (3)
<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) |
|
(2) |
起動するクラスに、 |
(3) |
|
次に、任意項目として起動パラメータを指定した場合の実行例を示す。
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)
$ 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)
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)
$ 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)
項番 | 説明 |
---|---|
(1) |
ジョブの起動パラメータとして、 |
任意オプション
CommandLineJobRunnerの構文で示した任意のオプションについて補足する。
CommandLineJobRunner
では以下の4つの起動オプションが使用できる。
ここでは個々の説明は他に委ねることとし、概要のみ説明する。
- -restart
-
失敗したジョブを再実行する。詳細は、処理の再実行を参照。
- -stop
-
実行中のジョブを停止する。詳細は、ジョブの管理を参照。
- -abandon
-
停止されたジョブを放棄する。放棄されたジョブは再実行不可となる。 Macchinetta Batch 2.xでは、このオプションを活用するシーンがないため、説明を割愛する。
- -next
-
過去に一度実行完了したジョブを再度実行する。ただし、Macchinetta Batch 2.xでは、このオプションを利用しない。
なぜなら、Macchinetta Batch 2.xでは、Spring Batchのデフォルトである「同じパラメータで起動したジョブは同一ジョブとして認識され、同一ジョブは1度しか実行できない」 という制約を回避しているためである。
詳細はパラメータ変換クラスについてにて説明する。
また、本オプションを利用するには、JobParametersIncrementer
というインタフェースの実装クラスが必要だが、 ブランクプロジェクトでは設定を行っていない。
そのため、本オプションを指定して起動すると、必要なBean定義が存在しないためエラーとなる。