配置 JobLauncher
-
Java
-
XML
当您使用 @EnableBatchProcessing
时,会自动为您提供一个 JobRegistry
。本节介绍如何配置您自己的 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
返回给调用者,如下图所示

图 1. Job 启动器序列
该序列流程直接,当从调度器启动时工作良好。然而,当尝试从 HTTP 请求启动时会出现问题。在这种场景下,启动需要异步进行,以便 TaskExecutorJobLauncher
立即返回给其调用者。这是因为长时间运行的进程(如批处理作业)会占用 HTTP 请求很长时间,保持 HTTP 请求长时间打开不是一个好的实践。下图显示了一个示例序列

图 2. 异步 Job 启动器序列
您可以通过配置 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
接口的任何实现来控制作业如何异步执行。