1、问题:spring batch程序运行执行完某个job的时候,job配置的参数不变,程序再次运行的时候,程序提示:spring batch restart Step already complete or not restartable, so no action to execute:
2、原因:Spring Batch需要每次唯一的作业参数来执行。
3、解决:但是在测试阶段,程序需要被一次又一次的执行,我们可以在创建job的时候新增参数来满足要求:
1)Job配置如下:
import org.springframework.batch.core.launch.support.RunIdIncrementer;
@Bean
public Job backUpJob(AccountsDailyListener listener) {
return jobBuilderFactory.get("backUpJob")
.incrementer(new RunIdIncrementer())
.listener(listener)
.flow(step1())
.end()
.build();
}
新增incrementer(new RunIdIncrementer())的配置使每个job的运行id都唯一;
2)Job的入参:
JobParameters jobParameters = new JobParametersBuilder()
.addDate("date", new Date())
.toJobParameters();
jobLauncher.run(ctx.getBean("myJob", Job.class), jobParameters);
看到很多Spring batch的示例代码中,JobParameter都会设置date并且值为new Date()。开始不知道用途就去掉了,然后程序再次执行会有提示:Step already complete or not restartable,加上addDate那段代码后就运行正常了。应该是参数相同的job里面的step默认都只执行一次,加上这个配置是最简单的解决方法。