Многоэтапное управление асинхронным 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, которые определили ожидаемый поток.

Отменив это, мы изменим фактический поток, который мы ожидали.

Другие вопросы по тегам