是否有可能在Spring Batch中引发致命的不可回滚的异常?

问题描述 投票:0回答:1

我尝试了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();
java spring spring-batch
1个回答
0
投票

是否有可能在Spring Batch中引发致命的不可回滚的异常?

是,像您一样使用FaultTolerantStepBuilder#noRollbacknoSkipnoRetry具有不同的含义。

如果我设置不带noRollback(MyException.class)的步骤,则该步骤将在处理后的行引发异常后立即失败,但会回滚所有数据库操作。

这是默认行为。如果发生异常,则事务将回滚并且该步骤将失败。

如果我使用noRollback(MyException.class),则数据库状态将保持不变,但是我不会收到致命错误的日志,并且步骤也不会中断/失败。

这里(我希望如此)不足为奇:由于交易没有回滚,因此状态保持不变,并且步骤继续进行。确保将日志级别设置为debug以获取所有详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.