此版本仍在开发中,尚不被认为是稳定的。对于最新的稳定版本,请使用 Spring Batch 文档 5.2.2spring-doc.cadn.net.cn

配置 JobOperator

最基本的实现JobOperator接口是TaskExecutorJobOperator. 它只需要两个依赖项:JobRepositoryJobRegistry.spring-doc.cadn.net.cn

以下示例显示了TaskExecutorJobLauncher在 Java 中:spring-doc.cadn.net.cn

Java 配置
...
@Bean
public JobOperator jobOperator(JobRepository jobRepository, JobRegistry jobRegistry) throws Exception {
	TaskExecutorJobJobOperator jobOperator = new TaskExecutorJobOperator();
	jobOperator.setJobRepository(jobRepository);
	jobOperator.setJobRegistry(jobRegistry);
	jobOperator.afterPropertiesSet();
	return jobOperator;
}
...

以下示例显示了TaskExecutorJobOperator在 XML 中:spring-doc.cadn.net.cn

XML 配置
<bean id="jobOperator" class="org.springframework.batch.core.launch.support.TaskExecutorJobOperator">
    <property name="jobRepository" ref="jobRepository" />
    <property name="jobRegistry" ref="jobRegistry" />
</bean>

一旦获得 JobExecution,它就会传递给 execute 方法的Job,最终返回JobExecution对调用方,作为 下图显示:spring-doc.cadn.net.cn

作业Starters序列
图 1.作业Starters序列

该序列很简单,从调度程序启动时效果很好。然而 尝试从 HTTP 请求启动时会出现问题。在此方案中,启动 需要异步完成,以便TaskExecutorJobOperator立即返回到其 访客。这是因为保持 HTTP 请求打开对于 长时间运行的进程(例如批处理作业)所需的时间量。下图显示 示例序列:spring-doc.cadn.net.cn

异步作业Starters序列
图 2.异步作业Starters序列

您可以配置TaskExecutorJobOperator要通过配置TaskExecutor.spring-doc.cadn.net.cn

以下 Java 示例配置了TaskExecutorJobOperator立即返回:spring-doc.cadn.net.cn

Java 配置
@Bean
public JobOperator jobOperator(JobRepository jobRepository, JobRegistry jobRegistry) throws Exception {
	TaskExecutorJobJobOperator jobOperator = new TaskExecutorJobOperator();
	jobOperator.setJobRepository(jobRepository);
	jobOperator.setJobRegistry(jobRegistry);
	jobOperator.setTaskExecutor(new SimpleAsyncTaskExecutor());
	jobOperator.afterPropertiesSet();
	return jobOperator;
}

以下 XML 示例配置了TaskExecutorJobOperator立即返回:spring-doc.cadn.net.cn

XML 配置
<bean id="jobOperator" class="org.springframework.batch.core.launch.support.TaskExecutorJobOperator">
    <property name="jobRepository" ref="jobRepository" />
    <property name="jobRegistry" ref="jobRegistry" />
    <property name="taskExecutor">
        <bean class="org.springframework.core.task.SimpleAsyncTaskExecutor" />
    </property>
</bean>

您可以使用 Spring 的任何实现TaskExecutor接口来控制作业的异步方式 执行。spring-doc.cadn.net.cn