Перезапуск задания Spring Batch и отслеживание статуса
Я использую базу данных H2 в качестве хранилища заданий. После перезапуска приложения мне нужно продолжить или перезапустить ранее незавершенные Spring Batch Jobs.
Прямо сейчас я использую следующий код для достижения этой цели:
jobRegistry.register(new ReferenceJobFactory(documetPipelineJob));
List<String> jobs = jobExplorer.getJobNames();
for (String job : jobs) {
Set<JobExecution> runningJobs = jobExplorer.findRunningJobExecutions(job);
for (JobExecution runningJob : runningJobs) {
runningJob.setStatus(BatchStatus.FAILED);
runningJob.setEndTime(new Date());
jobRepository.update(runningJob);
jobOperator.restart(runningJob.getId());
LOGGER.info("Job restarted: " + runningJob);
}
Он работает нормально, но имеет один побочный эффект - он создает новую запись в BATCH_JOB_EXECUTION
таблица и назначает его новым executionId
значение. Но я пользуюсь executionId
значение для отслеживания статуса работы:
jobExplorer.getJobExecution(executionId).getStatus()
Итак, я использую следующую логику - я планирую работу и возвращаю executionId
, Позже я использую это executionId
для того, чтобы отслеживать статус моей работы. С логикой перезапуска, которую я упомянул выше - я возвращаю executionId
, а затем перезапустите приложение, и после запуска приложения моя логика перезапустит незавершенные задания и назначит им новые executionId
, Таким образом, в этом случае я не могу отслеживать статус новой перезапущенной работы, потому что у меня есть старая executionId
только.
Как правильно проверить состояние задания в этом случае или как правильно перезапустить задания, чтобы иметь возможность отслеживать их состояние со старым executionId
?