Spring Batch - Использование ExitStatus для управления потоком

У меня есть приложение Spring Batch с использованием Spring-Boot (без конфигурации XML). Я пытаюсь понять полезность ExitStatus в моем приложении. В конце одного из шагов мне нужно выполнить инструкцию обновления SQL. Я достигаю этого, имея StepExecutionListener, как показано ниже:

@Component
public class MyListener extends StepListenerSupport{

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Transactional
    @Override
    public ExitStatus afterStep(StepExecution stepExecution) {
        jdbcTemplate.execute("some SQL update);
        return null;
    }
}

Как видите, я возвращаюсь null как ExitStatus, и это, кажется, работает нормально. Тем не менее, я не уверен, что это правильно, или мне нужно вернуть какое-то конкретное значение для ExitStatus?

1 ответ

Решение

Возврате null здесь эффектно сказано "не перекрывай ExitStatus Вы уже собирались использовать ".

Полезность приходит потому, что, если ваш SQL-оператор завершится неудачно (и предположительно выдает исключение), шаг НЕ ПРОЙДЕТ. Вместо этого он продолжит счастливо переходить к следующему шагу в вашей работе.

Вам нужно поймать исключение и вернуть ExitStatus.FAILED провалить шаг и работу.

В качестве альтернативы, допустим, у вас есть сценарий, в котором вы хотите выполнить какое-то управление потоком на основе действия на шаге... возможно, это был этап подготовки, и вы хотите завершить, если нет записей для обработки, но выполните какой-то дополнительный шаг если бы были записи на сцену. Тогда вы можете сделать что-то вроде этого:

@Override
public ExitStatus afterStep(StepExecution stepExecution) {
    if (stepExecution.getReadCount() > 0) {
        return ExitStatus.COMPLETED;
    }
    return ExitStatus.NOOP;
}

Тогда в вашей конфигурации работы вы можете сделать:

jobBuilderFactory.get("myJob")
            .start(step1()).on("NOOP").end()
            .from(step1()).on("COMPLETED").to(step2()).end()
            .from(step1()).on("*").fail()
            .build();
Другие вопросы по тегам