[英]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 。 noSkip
和noRetry
具有不同的含义。
如果我在没有 noRollback(MyException.class) 的情况下设置步骤,一旦处理的行抛出异常,该步骤就会失败,但它会回滚所有 db 操作。
这是默认行为。 如果发生异常,事务将回滚并且步骤失败。
如果我使用 noRollback(MyException.class),那么 db 状态将保持不变,但我没有得到致命错误的日志,并且步骤不会中断/失败。
这里没有什么奇怪的(我希望):由于事务没有回滚,所以状态被持久化并且步骤继续。 确保将日志级别设置为debug
以获取所有详细信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.