我有一个Spring Batch项目,我有几个工作。我在一个作业中将它们模块化,按顺序执行它们:
@Autowired
@Qualifier("job1")
private Job job1;
@Autowired
@Qualifier("job2")
private Job job2;
@Autowired
@Qualifier("job3")
private Job job3;
@Bean(name = "step1")
public Step step1() {
return stepBuilderFactory.get("step1").job(job1).build();
}
@Bean(name = "step2")
public Step step2() {
return stepBuilderFactory.get("step2").job(job2).build();
}
@Bean(name = "step3")
public Step step3() {
return stepBuilderFactory.get("step3").job(job3).build();
}
@Bean(name = "parentJob")
public Job parentJob(@Qualifier("step1") Step step1, @Qualifier("step2") Step step2, @Qualifier("step3") Step step3) {
return jobBuilderFactory.get("parentJob")
.incrementer(new RunIdIncrementer())
.repository(jobRepository)
.start(step1)
.next(step2)
.next(step3)
.build();
}
但是,如果其中一个JobSteps
失败,则父作业也会失败。是否有任何机制可以对所有JobSteps
进行容错,以便如果其中一个失败,父作业会继续?
答案 0 :(得分:1)
您基本上正在寻找here描述的条件流,即使前一个作业失败并且不是默认流,您也希望继续下一个作业。您需要使用模式 - *
来实现这一目标。
在Java Config中,它可能是,.on("*").to(...)
等等。
on(..)
的模式参数可以是ExitStatus和*
的任何内容,前提是您没有使用任何其他自定义状态。
希望它有所帮助!!