Используя Spring Batch, я пытаюсь запустить задание с некоторыми параметрами, но используются параметры из предыдущего экземпляра.
Spring запускается с использованием ApplicationContext context = SpringApplication.run(Application.class, args);
Мой бин задания:
@Bean
public Job closingJob(JobCompletionNotificationListener listener,
Step step1,
Step step2,
Step step3,
JobParametersValidator validator) {
return jobBuilderFactory.get("quarterly-closing")
.incrementer(new RunIdIncrementer())
.validator(validator)
.listener(listener)
.flow(step1)
.next(step2)
.next(step3)
.end()
.build();
}
В журналах:
2020-04-15 08:51:10,259 - INFO - [] {o.s.b.a.b.JobLauncherCommandLineRunner} --> Running default command line with: [run.id(long)=1, my.param=secondRun ]
2020-04-15 08:51:10,422 - INFO - [] {o.s.b.c.l.s.SimpleJobLauncher} --> Job: [FlowJob: [name=my-job]] launched with the following parameters: [{run.id=2, my.param=firstRun}]
Я видел похожий вопрос , но есть только один ответ, который мне не помог.
Редактировать: я пробовал его с пользовательским JobParametersIncrementer, но он не работает: он все еще использует параметры предыдущего экземпляра
@Bean
public JobParametersIncrementer incrementer(){
return parameters -> {
if (parameters==null || parameters.isEmpty()) {
return new JobParametersBuilder().addLong("run.id",1L).toJobParameters();
}
long id = parameters.getLong("run.id",1L) + 1;
return new JobParametersBuilder().addLong("run.id", id).toJobParameters();
};
}