java - 是否有可能在 Spring Batch 中引发致命的不可回滚异常?
问题描述
我尝试了所有组合noSkip(), noRetry(), noRollback()
但我没有实现它。如果我在没有 的情况下设置该步骤noRollback(MyException.class)
,则一旦处理的行引发异常,该步骤就会失败,但它会回滚所有数据库操作。如果我使用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) 的情况下设置步骤,则一旦处理的行引发异常,该步骤就会失败,但它会回滚所有数据库操作。
这是默认行为。如果发生异常,事务将回滚并且步骤失败。
如果我使用 noRollback(MyException.class),则 db 状态将保持不变,但我没有收到致命错误的日志,并且步骤不会中断/失败。
这里没有什么令人惊讶的(我希望):由于事务没有回滚,所以状态保持不变并且步骤继续。确保将日志级别设置debug
为获取所有详细信息。
推荐阅读
- php - 如果未在 laravel 中验证,则在一段时间后从数据库中删除用户
- javascript - 文档未定义 Javascript
- ssh - SFTP、SSH 和 SSH 隧道
- reactjs - 跟踪 react useEffect 依赖数组
- javascript - 我想显示发布内容的id,目前是用变量表示的,所以我想用数组索引来显示
- sql - 为什么 FIRST_VALUE 和 LAST_VALUE 不是 SQL 中的聚合函数?
- r - 如何使用虹膜数据绘制这个?
- python-3.x - 获取 TypeError:如果未指定方向,则 key_or_list 必须是列表的实例
- javascript - array.map() 无法按预期渲染
- React 中的组件
- python - 无法在第一个 elif 块之外打印