JobLauncher の構成

  • Java

  • XML

@EnableBatchProcessing を使用すると、JobRegistry が提供されます。このセクションでは、独自の構成方法について説明します。

JobLauncher インターフェースの最も基本的な実装は TaskExecutorJobLauncher です。その唯一の必要な依存関係は JobRepository (実行を取得するために必要) です。

  • Java

  • XML

次の例は、Java での TaskExecutorJobLauncher を示しています。

Java 構成
...
@Bean
public JobLauncher jobLauncher() throws Exception {
	TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
	jobLauncher.setJobRepository(jobRepository);
	jobLauncher.afterPropertiesSet();
	return jobLauncher;
}
...

次の例は、XML の TaskExecutorJobLauncher を示しています。

XML 構成
<bean id="jobLauncher"
      class="org.springframework.batch.core.launch.support.TaskExecutorJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
</bean>

取得された JobExecution は Job の execute メソッドに渡され、最終的に次の図に示すように JobExecution が呼び出し元に返されます。

Job Launcher Sequence
図 1: ジョブランチャーシーケンス

シーケンスは簡単で、スケジューラーから起動するとうまく機能します。ただし、HTTP リクエストから起動しようとすると問題が発生します。このシナリオでは、TaskExecutorJobLauncher がすぐに呼び出し元に戻るように、起動を非同期で行う必要があります。これは、実行時間の長いプロセス (バッチジョブなど) に必要な時間、HTTP リクエストを開いたままにしておくのは適切ではないためです。次の図は、シーケンスの例を示しています。

Async Job Launcher Sequence
図 2: 非同期ジョブランチャーシーケンス

TaskExecutor を構成することにより、このシナリオを可能にするように TaskExecutorJobLauncher を構成できます。

  • Java

  • XML

次の Java の例では、すぐに戻るように TaskExecutorJobLauncher を構成します。

Java 構成
@Bean
public JobLauncher jobLauncher() {
	TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
	jobLauncher.setJobRepository(jobRepository());
	jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
	jobLauncher.afterPropertiesSet();
	return jobLauncher;
}

次の XML の例では、すぐに戻るように TaskExecutorJobLauncher を構成しています。

XML 構成
<bean id="jobLauncher"
      class="org.springframework.batch.core.launch.support.TaskExecutorJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
    <property name="taskExecutor">
        <bean class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
    </property>
</bean>

Spring TaskExecutor インターフェースの任意の実装を使用して、ジョブの非同期実行方法を制御できます。