Можно ли выдать роковое исключение без отката в Spring Batch? - PullRequest
0 голосов
/ 26 марта 2020

Я перепробовал все комбинации noSkip(), noRetry(), noRollback() и не добиваюсь этого. Если я установлю шаг без noRollback(MyException.class), шаг завершится неудачей, как только обработанная строка сгенерирует исключение, но отменит все действия db. Если я использую noRollback(MyException.class), то состояние БД сохраняется, но я не получаю журнал фатальной ошибки, и шаг не прерывается / не выполняется.

Любой способ обработки этого интуитивно понятен? Это последний код, который я пробовал

  return this.stepBuilderFactory.get(STEP_PROCESS_ROWS)
            .faultTolerant()
            .noSkip(UnexpectedJobExecutionException.class)
            .noRetry(UnexpectedJobExecutionException.class)
            .noRollback(UnexpectedJobExecutionException.class)
            .reader(myReader)
            .processor(myProcessor)
            .writer(myWriter)
            .build();

1 Ответ

1 голос
/ 26 марта 2020

Возможно ли выдать роковое исключение без отката в Spring Batch?

Да, используя FaultTolerantStepBuilder # noRollback , как вы это сделали. noSkip и noRetry имеют разные значения.

Если я установлю шаг без noRollback (MyException.class), этот шаг завершится неудачно, как только обработанная строка выдаст исключение, но откатит все Действия базы данных.

Это поведение по умолчанию. Если возникает исключение, транзакция откатывается и шаг завершается неудачей.

Если я использую noRollback (MyException.class), то состояние БД сохраняется, но я не получаю журнал фатальной ошибки и шаг не прерывается / не выполняется.

Ничего удивительного здесь (я надеюсь): поскольку транзакция не откатывается, состояние сохраняется и шаг продолжается. Обязательно установите уровень журнала debug, чтобы получить все подробности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...