Я использую базу данных H2 в качестве хранилища заданий. После перезапуска приложения мне нужно продолжить или перезапустить ранее незавершенные задания Spring Batch.
Сейчас я использую следующий код для достижения этой цели:
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
?