|
对于最新稳定版本,请使用 Spring Batch 文档 6.0.3! |
配置 JobLauncher
-
Java
-
XML
当您使用 @EnableBatchProcessing 时,系统会为您提供一个 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. 作业Starters序列
该流程简单明了,在从调度器启动时运行良好。然而,当尝试从 HTTP 请求启动时会出现问题。在这种情况下,启动操作需要异步执行,以便 TaskExecutorJobLauncher 能够立即返回给调用者。这是因为让 HTTP 请求长时间保持打开状态(以等待批处理作业等耗时较长的进程完成)并非良好的实践。下图展示了一个示例流程:
图 2.异步作业Starters序列
您可以通过配置一个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 接口的任何实现来控制作业如何异步执行。