Перезапуск задания 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?

0 ответов

Другие вопросы по тегам