我尝试了noSkip(), noRetry(), noRollback()
的所有组合,但没有实现。如果我将步骤设置为不带noRollback(MyException.class)
,则该步骤将在处理后的行引发异常后立即失败,但是它将回滚所有数据库操作。如果我使用noRollback(MyException.class)
,则db状态将保持不变,但是我不会收到致命错误的日志,并且步骤也不会中断/失败。
以直观的方式处理此问题的任何方法?这是我尝试的最后一个代码
return this.stepBuilderFactory.get(STEP_PROCESS_ROWS)
.faultTolerant()
.noSkip(UnexpectedJobExecutionException.class)
.noRetry(UnexpectedJobExecutionException.class)
.noRollback(UnexpectedJobExecutionException.class)
.reader(myReader)
.processor(myProcessor)
.writer(myWriter)
.build();
是否有可能在Spring Batch中引发致命的不可回滚的异常?
是,像您一样使用FaultTolerantStepBuilder#noRollback。 noSkip
和noRetry
具有不同的含义。
如果我设置不带noRollback(MyException.class)的步骤,则该步骤将在处理后的行引发异常后立即失败,但会回滚所有数据库操作。
这是默认行为。如果发生异常,则事务将回滚并且该步骤将失败。
如果我使用noRollback(MyException.class),则数据库状态将保持不变,但是我不会收到致命错误的日志,并且步骤也不会中断/失败。
这里(我希望如此)不足为奇:由于交易没有回滚,因此状态保持不变,并且步骤继续进行。确保将日志级别设置为debug
以获取所有详细信息。