Spring 使用注解的批处理作业执行迭代

Spring batch Job execution iteraton using annotations

我正在使用 spring 批处理,没有 xml 配置。我想创建一个由多个步骤组成的作业,并且我想对同一个作业进行多次迭代。所以基本上我想创建一个由几个步骤组成的流程,最后一步使用侦听器检查条件,如果条件满足则作业结束 returns 状态,如果条件不满足则转到第一步。

我正在尝试以编程方式创建它,但运气不佳,我通过两个步骤将其简化为最简单的解决方案。

public class MyListener {

    int iterations = 0;

    @AfterStep
    public ExitStatus afterStep(StepExecution stepExecution) {
        if(3 > iterations) {
            iterations ++;
            return new ExitStatus("CONTINUE");
        }
        else {
            iterations=0;
            return new ExitStatus("FINISHED");
        }
    }
}
@Bean
public MyListener listener() {
    return new MyListener();
}
@Bean
public Step step() {
    return stepBuilderFactory.get("step").<Object, Object> chunk(1).reader(dummyReader())
            .processor(logItemProcessor()).writer(logItemWriter()).build();
}

@Bean
public Step step2() {
    return stepBuilderFactory.get("step").<Object, Object> chunk(1).reader(secondReader())
            .processor(logItemProcessor()).writer(logItemWriter()).listener(listener()).build();
}
@Bean
public Job jobtest2() {
    return jobBuilderFactory.get("testJob2")
            .start(step())
            .next(step2()).on("CONTINUE").to(step()).on("FINISHED").end().build()
            .build();
}

这是我的最后一个 atemp,但 id 似乎不起作用

我知道我的代码有什么问题,两个步骤相同"step"

@Bean
public Step step() {
    return stepBuilderFactory.get("step").<Object, Object> chunk(1).reader(dummyReader())
            .processor(logItemProcessor()).writer(logItemWriter()).build();
}

@Bean
public Step step2() {
    return stepBuilderFactory.get("step2").<Object, Object> chunk(1).reader(secondReader())
            .processor(logItemProcessor()).writer(logItemWriter()).listener(listener()).build();
}

如果我更改第二个 bean "step2" 它开始工作