java - 如何创建容错JobStep

标签 java spring spring-batch

我有一个 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/

相关文章:

java - XMLGregorianCalendar 到 java.sql.Timestamp

spring - 将内联图像添加到 spring 电子邮件

java - Spring Batch 无法打开 JPA EntityManager 进行事务;嵌套异常是 java.lang.IllegalStateException : Transaction already active

java - Spring 批处理中的并行项目编写器

Java+线程控制方法

java正则表达式支持非ascii值吗?

java - 将已压缩的文件插入 zip 文件中

java - 如何创建一个可以作为窗口服务运行的java应用程序?

java - 是否可以在 spring-boot 中更改/health 端点?

java - Reader Spring Batch 中 FetchSize 和 PageSize 的实用程序