Поиск действительно запущенных весенних пакетных заданий

Я пытаюсь найти способ определить, действительно ли работает JobExecution, полученный от JobExplorer. Проблема в том, что проводник проверяет выполнение задания, запуская запрос jdbc. Но в некоторых случаях (например, контейнер с заданием Spring Batch был убит/перезапущен) задания остаются в БД в рабочем состоянии, хотя они потеряны, и во время выполнения фактически не выполняется обработка.

И простой метод, как

private boolean isJobRunning(String jobName) {
    var activeExecutions = jobExplorer.findRunningJobExecutions(jobName);
    return activeExecutions
        .stream()
        .anyMatch(jobExecution -> jobExecution.getStatus().isRunning());
}

не работает, как ожидалось.

Есть ли способ найти фактически активные вакансии? заранее спасибо


person Igor Petrov    schedule 25.12.2019    source источник
comment
Это правильный подход. Как вы получаете объект jobExplorer???   -  person Sushil Behera    schedule 26.12.2019
comment
Этот подход не работает, если приложение Spring-Batch было остановлено, а незавершенные задания остались. Эти задания имеют нетерминальное состояние в схеме Spring Batch и распознаются как все еще активные кодом выше. Итак, мое временное решение подразумевает отслеживание статуса во время выполнения, изменение его по событиям задания. Это решение довольно спорное хотя бы потому, что его трудно масштабировать.   -  person Igor Petrov    schedule 27.12.2019
comment
да, если задание внезапно прекращается, оно остается в статусе RUNNING в базе данных. Просто взглянув на базу данных (а именно на столбец состояния), невозможно отличить задание, которое действительно выполняется, от задания, которое было остановлено.   -  person Mahmoud Ben Hassine    schedule 02.01.2020
comment
Отвечает ли это на ваш вопрос? Spring Batch: как контролировать текущую работу задания и показывать прогресс на странице jsp   -  person Mahmoud Ben Hassine    schedule 02.01.2020