我有一个 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
具有容错能力,以便如果其中一个作业失败,父作业将继续?
最佳答案
您基本上是在寻找条件流,如here所述。即,即使上一个作业失败并且这不是默认流程,您也想继续执行下一个作业。您需要使用模式 - *
来实现这一点。
在 Java Config 中,它会像 , .on("*").to(...)
等等。
on(..)
的模式参数可以是 ExitStatus 中的任何值。和 *
前提是您没有使用任何其他自定义状态。
希望对你有帮助!!
关于java - 如何创建容错JobStep,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41886800/