配置 JobOperator

JobOperator 介面最基本的實現是 TaskExecutorJobOperator。它只需要一個依賴:一個 JobRepository。所有其他依賴,如 JobRegistryMeterRegistryTransactionManager 等都是可選的。Spring Batch 提供了一個工廠 bean 來簡化這個運算子的配置:JobOperatorFactoryBean。這個工廠 bean 在 TaskExecutorJobOperator 周圍建立一個事務代理,以確保其所有公共方法都在事務中執行。

  • 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 介面的任何實現來控制作業如何非同步執行。

© . This site is unofficial and not affiliated with VMware.