spring batch job重复多次执行的配置--spring batch restart Step already complete or not restartable

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默认都只执行一次,加上这个配置是最简单的解决方法。

你可能感兴趣的:(java)