系列文章第三篇,学习一下 spring batch 的两个重要的组件,决策器(Decider)和监听器(Listener) 。
第一篇文章的传送门: Spring batch系列文章(一)——介绍和入门
第二篇的文章传送门: Spring batch系列文章(二)——核心api
决策器
什么是决策器?
简而言之,决策器就是在step执行完成后,根据执行的结果动态进行决策,能够根据不同的结果执行不同的接下来的step,这样的一个组件就叫决策器。决策器可以自定义完成一些复杂的判断条件。
在源码中,决策器的接口是JobExecutionDecider,这里面只有一个方法:
public interface JobExecutionDecider {
FlowExecutionStatus decide(JobExecution jobExecution, @Nullable StepExecution stepExecution);
}
其中,两个参数分别是jobExecution和stepExecution,代表执行决策时当前的任务和步骤的实例。返回值是FlowExecutionStatus类型。
决策器实现
接下来我们写一个简单的决策器示例:
首先定义一个决策器:
public class MyDecider implements JobExecutionDecider {
private int count;
@Override
public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
//每次执行count+1
count++;
if (count % 2 == 0) {
//count为偶数时返回even
return new FlowExecutionStatus("even");
}
//奇数时返回odd
return new FlowExecutionStatus("odd");
}
}
接下来完成DeciderDemo
@Configuration
@EnableBatchProcessing
public class DeciderDemo {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Bean
public Job DeciderDemoJob(){
return jobBuilderFactory.get("DeciderDemoJob")
.start(deciderDemoStep1())
.next(myDecider())