3
By default, Spring Batch does not allow you to execute a job that already has a complete execution with the same parameters. If you try to run, get the message:
"A job instance already exists and is complete for Parameters={Baz=Quix, foo=bar}. If you want to run this job Again, change the Parameters."
The problem is that I need to run the same batch several times a day, thinking about it, I used the incrementer quoted in the official documentation:
@Configuration
public class BatchConfiguration {
  @Autowired
  private JobBuilderFactory jobBuilderFactory;
  @Autowired
  private StepBuilderFactory stepBuilderFactory;
  @Bean
  public Job job() {
    return this.jobBuilderFactory
      .get("jobRestService1").incrementer(
        new RunIdIncrementer()
      )
      .start(step1()).build();
  }
  @Bean
  public Step step1() {
    return this.stepBuilderFactory
      .get("step1").tasklet((stepContribution, chunkContext) -> {
        System.out.println("Step1 ran today!");
        return RepeatStatus.FINISHED;
    }).build();
  }
}
What it does is generate a parameter run.id automatically. It is as if you are passing different parameters to allow re-export. If I run the job directly, it works, it actually generates the run.id and allows re-experience. The problem is when I try to run it with a Joblauncher:
@RestController
public class JobLaunchingController {
  @Autowired
  private JobLauncher jobLauncher;
  @Autowired
  private ApplicationContext context;
  @PostMapping(path = "/run")
  public ExitStatus runJob(@RequestBody JobLaunchRequest request) throws Exception {
    Job job = this.context.getBean(request.getName(), Job.class);
    return this.jobLauncher.run(job, request.getJobParameters()).getExitStatus();
  }
}
He ignores the incrementer and uses only the parameters I passed to the run. 
How do I get him to summon the incrementer when I run the job with Joblauncher? I don’t want to have to create the parameter run id. at hand, since I set up the job to create it for me through the incrementer.