このバージョンはまだ開発中であり、まだ安定しているとは見なされていません。最新の安定バージョンについては、Spring Batch ドキュメント 5.2.4 を使用してください! |
JobOperator の構成
JobOperator インターフェースの最も基本的な実装は TaskExecutorJobOperator です。必要な依存関係は JobRepository のみです。JobRegistry、MeterRegistry、TransactionManager などのその他の依存関係はすべてオプションです。Spring Batch は、この演算子 JobOperatorFactoryBean の設定を簡素化するために、ファクトリ Bean を提供します。このファクトリ Bean は、TaskExecutorJobOperator の周囲にトランザクションプロキシを作成し、すべての public メソッドがトランザクション内で実行されるようにします。
Java
XML
次の例は、Java で TaskExecutorJobOperator を構成する方法を示しています。
...
@Bean
public JobOperatorFactoryBean jobOperator(JobRepository jobRepository) {
JobOperatorFactoryBean jobOperatorFactoryBean = new JobOperatorFactoryBean();
jobOperator.setJobRepository(jobRepository);
return jobOperatorFactoryBean;
}
... 次の例は、XML で TaskExecutorJobOperator を構成する方法を示しています。
<bean id="jobOperator" class="org.springframework.batch.core.launch.support.JobOperatorFactoryBean">
<property name="jobRepository" ref="jobRepository" />
</bean> 取得された JobExecution は Job の execute メソッドに渡され、最終的に次の図に示すように JobExecution が呼び出し元に返されます。

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

TaskExecutor を構成することにより、このシナリオを可能にするように TaskExecutorJobOperator を構成できます。
Java
XML
次の Java の例では、すぐに戻るように TaskExecutorJobOperator を構成します。
@Bean
public JobOperatorFactoryBean jobOperator(JobRepository jobRepository) {
JobOperatorFactoryBean jobOperatorFactoryBean = new JobOperatorFactoryBean();
jobOperator.setJobRepository(jobRepository);
jobOperator.setTaskExecutor(new SimpleAsyncTaskExecutor());
return jobOperatorFactoryBean;
} 次の XML の例では、すぐに戻るように TaskExecutorJobOperator を構成しています。
<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 インターフェースの任意の実装を使用して、ジョブを非同期的に実行する方法を制御できます。