繁体   English   中英

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

[英]Is it possible to throw a fatal non-rollbackable exception in Spring Batch?

我尝试了noSkip(), noRetry(), noRollback()所有组合, noSkip(), noRetry(), noRollback()没有实现。 如果我在没有noRollback(MyException.class)情况下设置步骤,一旦处理的行抛出异常,该步骤就会失败,但它会回滚所有数据库操作。 如果我使用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();

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

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

如果我在没有 noRollback(MyException.class) 的情况下设置步骤,一旦处理的行抛出异常,该步骤就会失败,但它会回滚所有 db 操作。

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

如果我使用 noRollback(MyException.class),那么 db 状态将保持不变,但我没有得到致命错误的日志,并且步骤不会中断/失败。

这里没有什么奇怪的(我希望):由于事务没有回滚,所以状态被持久化并且步骤继续。 确保将日志级别设置为debug以获取所有详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM