Очевидной проблемой является слово «ЗАВЕРШЕНО» внутри первого on (). Метод on (шаблон String) получает значение «COMPLETE» в качестве параметра вместо, например, «COMPLETED», задание завершается с состоянием «FAILED», если соответствующий пользовательский статус выхода не был создан. Тем не менее, я не знаю, почему он зависает и не просто не работает в вашем случае. Следующая версия вашей конфигурации работы, кажется, работает нормально, пока все тасклеты возвращают FINISHED RepeatStatus:
@Bean("MyJob")
public Job umpInpatientCensusRptBatchJob(...) throws IOException {
return jobBuilderFactory.get( "MyJob" )
.incrementer( new RunIdIncrementer() )
.start( Step0 ).on( "COMPLETED" ).end()
.from( Step0 ).on( "CONTINUE" )
.to( Step1 )
.next( Step2 )
.next( Step3 )
.end()
.build();
}
Если тасклет Step0 возвращает RepeatStatus.CONTINUABLE, Step0 повторяется навсегда, так как это цель этого RepeatStatus. Таким образом, невозможно достичь Step1 с этой конфигурацией. Чтобы решить, следует ли вам выполнять следующие шаги, вместо использования статуса повторения тасклета (что я не знаю, возможно ли это), вы можете либо использовать StepExecutionListener на Step0, либо добавить решатель в поток после Step0:
Spring-Batch: как вернуть пользовательский STATUS для выхода из задания из StepListener, чтобы решить следующий шаг