Jdbi3是否会对所有类型的异常保证事务回滚?
问题解答
你给出的代码场景下,抛出CustomException时可以100%确定Jdbi会自动回滚事务,不需要异常是SQLException或者Jdbi内置异常类型。
核心逻辑说明
- Jdbi的
inTransaction方法默认设计约定:只要传入的lambda回调块抛出任何类型的异常(包括checked异常、unchecked异常、JDBC底层异常、Jdbi内置异常、业务自定义异常),都会自动执行事务回滚操作;只有lambda正常执行完成没有抛出任何异常时,才会自动提交事务。 - 该行为不需要额外配置,除非你在lambda内部主动调用
handle.commit()/handle.rollback()手动修改事务状态,否则只要异常向上抛出到inTransaction的捕获逻辑,就会触发回滚。
特殊场景说明
如果业务需要某类异常不触发回滚,只需要在lambda内部捕获对应异常,不向外抛出即可,其余场景均遵循默认回滚规则。
内容的提问来源于stack exchange,提问作者res1
相关产品推荐
相关产品推荐

