我正在使用没有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",它开始工作