Почему jobOperator.startNextInstance не принимает параметры?
У меня есть работа, которая принимает параметры x=y
и я запланировал запускать каждые 10 секунд. Вот как я начинаю это:
final JobExecution previousExecution = jobRepository.getLastJobExecution(jobId, jobParameters);
if (previousExecution != null && previousExecution.getStartTime() != null) {
return jobOperator.startNextInstance(jobId);
} else {
return jobOperator.start(jobId, PropertiesConverter.propertiesToString(jobParametersConverter.getProperties(jobParameters)));
}
Первый раз, когда я начинаю работу, она идет в else
пункт, и он начинается успешно. Через 10 секунд он уходит внутрь if
пункт, и он начинается успешно тоже. Затем я вручную запускаю задание (через REST API), но на этот раз с параметрами x=z
и он успешно запускает его. Затем проходит 10 секунд, и работа собирается начать снова. Сейчас jobRepository.getLastJobExecution
возвращает правильный x=y
выполнение, но угадайте, что - jobOperator.startNextInstance
не заботится о ваших параметрах - он принимает только jobId
, И внутри он грузит не то x=z
экземпляр и запускает работу с x=z
отныне и навсегда каждые 10 секунд.
Мой вопрос - почему startNextInstance
не принять задание параметров? Я хочу запустить nextInstance для заданных параметров задания, почему это не разрешено?
1 ответ
JobOperator
В соответствии с документацией, интерфейс низкого уровня и на самом деле не идеальный способ запуска Spring Batch Jobs. JobLauncher
действительно правильный способ запуска заданий в Spring Batch и принимает параметры.