Перезапуск задания Spring Batch и отслеживание статуса - PullRequest
0 голосов
/ 04 июля 2018

Я использую базу данных 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?

...