Spring 事务默认回滚的异常是什么?

在 Spring 中,默认情况下,只有在运行时异常(RuntimeException)或错误(Error)发生时,事务才会回滚。这是因为 Spring 的事务基础设施默认只对未检查的异常进行回滚。未检查的异常是那些从 RuntimeException 类派生的异常,以及 Error 对象。

对于已检查的异常(即那些需要明确进行 catch 处理或者在方法签名中通过 throws 声明的异常),Spring 不会默认进行回滚。已检查的异常通常表示可以恢复的条件,而运行时异常和错误通常表示编程错误,因此 Spring 选择只对后者进行默认回滚。

如果你想改变这种默认行为,可以在 @Transactional 注解中使用 rollbackFornoRollbackFor 属性来明确指定哪些异常应该触发回滚,哪些不应该:

@Transactional(rollbackFor = Exception.class)
public void someServiceMethod() {
    // 业务代码
}

在上面的代码中,我们指定了对所有的 Exception 进行回滚,包括已检查的异常。这个行为与 Spring 的默认行为相反,因此需要谨慎使用。

发表评论

后才能评论