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