JobLauncher の構成
Java
XML
@EnableBatchProcessing
を使用すると、JobRegistry
が提供されます。このセクションでは、独自の構成方法について説明します。
JobLauncher
インターフェースの最も基本的な実装は TaskExecutorJobLauncher
です。その唯一の必要な依存関係は JobRepository
(実行を取得するために必要) です。
Java
XML
次の例は、Java での TaskExecutorJobLauncher
を示しています。
...
@Bean
public JobLauncher jobLauncher() throws Exception {
TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
jobLauncher.setJobRepository(jobRepository);
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
...
次の例は、XML の TaskExecutorJobLauncher
を示しています。
<bean id="jobLauncher"
class="org.springframework.batch.core.launch.support.TaskExecutorJobLauncher">
<property name="jobRepository" ref="jobRepository" />
</bean>
取得された JobExecution は Job
の execute メソッドに渡され、最終的に次の図に示すように JobExecution
が呼び出し元に返されます。
シーケンスは簡単で、スケジューラーから起動するとうまく機能します。ただし、HTTP リクエストから起動しようとすると問題が発生します。このシナリオでは、TaskExecutorJobLauncher
がすぐに呼び出し元に戻るように、起動を非同期で行う必要があります。これは、実行時間の長いプロセス (バッチジョブなど) に必要な時間、HTTP リクエストを開いたままにしておくのは適切ではないためです。次の図は、シーケンスの例を示しています。
TaskExecutor
を構成することにより、このシナリオを可能にするように TaskExecutorJobLauncher
を構成できます。
Java
XML
次の Java の例では、すぐに戻るように TaskExecutorJobLauncher
を構成します。
@Bean
public JobLauncher jobLauncher() {
TaskExecutorJobLauncher jobLauncher = new TaskExecutorJobLauncher();
jobLauncher.setJobRepository(jobRepository());
jobLauncher.setTaskExecutor(new SimpleAsyncTaskExecutor());
jobLauncher.afterPropertiesSet();
return jobLauncher;
}
次の XML の例では、すぐに戻るように TaskExecutorJobLauncher
を構成しています。
<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
インターフェースの任意の実装を使用して、ジョブの非同期実行方法を制御できます。