弹簧批处理 使用注释的作业执行迭代



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

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

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 似乎不起作用

我知道

我的代码出了什么问题,两个步骤都有相同的"步骤"

@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",它开始工作

最新更新