Многоэтапное управление асинхронным Spring Batch Job
У меня есть весеннее пакетное задание, настроенное для асинхронного запуска (запускается из веб-службы и использует аннотации для настройки асинхронных методов). Мой первый шаг выполняется успешно.
Моя проблема заключается в том, что у меня настроено несколько шагов, и поток определяется по состоянию шага, то есть по завершении он переходит к шагу 2, но при сбое он переходит к шагу обработки сбоя, который отправляет письмо. При удалении аннотации поток работает, как и ожидалось. Однако, когда я использую аннотации для асинхронного выполнения задания, выполняется выполнение любого шага, настроенного на выполнение по завершении. образец конфигурации потока:
<batch:job id="batchJob" restartable="true">
<batch:step id="step1">
<batch:tasklet ref="task1">
<batch:listeners>
<batch:listener ref="failureHandler" />
</batch:listeners>
</batch:tasklet>
<batch:next on="HAS_ERRORS" to="reportError" />
<batch:end on="*" />
<batch:next on="COMPLETED" to="step2" />
</batch:step>
<batch:step id="step2">
<batch:tasklet ref="task2">
<batch:listeners>
<batch:listener ref="failureHandler" />
</batch:listeners>
</batch:tasklet>
<batch:next on="HAS_ERRORS" to="reportError" />
<batch:end on="*" />
</batch:step>
<batch:step id="reportError">
<batch:tasklet ref="failError">
<batch:listeners>
<batch:listener ref="failureHandler" />
</batch:listeners>
</batch:tasklet>
<batch:end on="*" />
</batch:step>
</batch:job>
Я попытался вернуть ExitStatus и BatchStatus, которые были проигнорированы.
Я реализовал прослушиватель выполнения шага, но я еще не реализовал механизм обмена сообщениями для взаимодействия между шагами, и я не вижу ничего в контексте выполнения шага, которое дает мне указание на результат шага.
У меня вопрос: есть ли метод или механизм, который я мог упустить, чтобы получить статус шага после его завершения? или механизм обмена сообщениями вне пакетного процесса является приемлемым способом обработки?
Мне кажется, что я не вижу статус шага пакета после его завершения, когда он асинхронный (я получаю ожидаемые результаты / сбои при удалении аннотации @Async). Я думаю, что, возможно, что-то упущено в моем понимании. мы потратили некоторое время на его изучение, чтобы оценить правильность указателя.
1 ответ
У меня больше нет доступа к этому конкретному коду.
Я полагаю, что проблема вызвана аннотациями, переопределяющими конфигурацию XML, которые определили ожидаемый поток.
Отменив это, мы изменим фактический поток, который мы ожидали.