Чтобы «опросить» статус JobExecution
, вы должны получать новый экземпляр от JobOperator каждый раз, когда проверяете его состояние.Так что получите JobExecution внутри цикла while, а не снаружи.
Так что это должно быть больше похоже, например:
do {
Thread.sleep(300);
// log or whatever
BatchStatus status = jobOperator.getJobExecution(execId).getBatchStatus();
} while(status != BatchStatus.COMPLETED && status != BatchStatus.FAILED) ;
Это немного сложно, потому что поведение здесь не стандартизировано спецификацией.
Поскольку спецификация допускаетразнообразие реализаций репозитория заданий (например, база данных, простая карта в памяти, другое, ...), для «кэшированного» JobExecution не требуется особого поведения, и вы можете обнаружить, что оно «работает» некоторое времяс вашим исходным кодом.
Я не думаю, что вы на самом деле видите возвращаемый экземпляр "родительского" объекта;Я подозреваю, что вы можете просто запутаться, не увидев того, что ожидали.
В любом случае, чтобы ваш код был более переносимым, получайте JobExecution
с каждой проверкой состояния.