Параметры задания изменяются между JobLauncherCommandLineRunner и SimpleJobLauncher - PullRequest
0 голосов
/ 15 апреля 2020

Используя 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();
   };
}

1 Ответ

0 голосов
/ 16 апреля 2020

Используя пружинный пакет, я пытаюсь запустить задание с некоторыми параметрами, но используются параметры из предыдущего экземпляра.

В соответствии с определением задания вы используете JobParametersIncrementer , Когда вы добавляете инкрементер в определение своей работы, вы, в основном, говорите Spring Batch следующее: всякий раз, когда я запускаю свою работу, увеличивайте параметры предыдущего экземпляра, используя мой инкрементатор, и создавайте новый экземпляр работы.

Использование инкрементатора параметров задания имеет смысл, когда существует логическая последовательность экземпляров задания (иначе можно вычислить следующий экземпляр задания из предыдущего).

Поэтому Spring Batch примет параметры предыдущего экземпляра. , передайте их вашему инкрементеру и используйте те, которые возвращены инкрементатором, для создания «следующего» экземпляра задания в последовательности.

Надеемся, это прояснит, почему «используются параметры из предыдущего экземпляра».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...