このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Batch ドキュメント 5.2.4 を使用してください!

JobOperator の構成

JobOperator インターフェースの最も基本的な実装は TaskExecutorJobOperator です。必要な依存関係は JobRepository のみです。JobRegistryMeterRegistryTransactionManager などのその他の依存関係はすべてオプションです。Spring Batch は、この演算子 JobOperatorFactoryBean の設定を簡素化するために、ファクトリ Bean を提供します。このファクトリ Bean は、TaskExecutorJobOperator の周囲にトランザクションプロキシを作成し、すべての public メソッドがトランザクション内で実行されるようにします。

  • Java

  • XML

次の例は、Java で TaskExecutorJobOperator を構成する方法を示しています。

Java 構成
...
@Bean
public JobOperatorFactoryBean jobOperator(JobRepository jobRepository) {
	JobOperatorFactoryBean jobOperatorFactoryBean = new JobOperatorFactoryBean();
	jobOperator.setJobRepository(jobRepository);
	return jobOperatorFactoryBean;
}
...

次の例は、XML で TaskExecutorJobOperator を構成する方法を示しています。

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

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

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

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

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

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

  • Java

  • XML

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

Java 構成
@Bean
public JobOperatorFactoryBean jobOperator(JobRepository jobRepository) {
	JobOperatorFactoryBean jobOperatorFactoryBean = new JobOperatorFactoryBean();
	jobOperator.setJobRepository(jobRepository);
	jobOperator.setTaskExecutor(new SimpleAsyncTaskExecutor());
	return jobOperatorFactoryBean;
}

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

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

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