小编典典

Spring transaction:在Exception或Throwable上回滚

spring

我想知道使用代替

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)

使用 Throwable

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)

据我了解Error,即使发生了某些非常糟糕的事件,捕获也会帮助我们正确地进行行为。还是没有帮助?


阅读 799

收藏
2020-04-21

共1个答案

小编典典

据我了解,即使发生某些非常糟糕的事件,捕获错误也会帮助我们正确地执行操作。还是没有帮助?

你不需要显式指定rollbackFor = Throwable.class,因为默认情况下,如果Error发生交易,spring会默认回滚事务。

请参见12.5.3回滚声明式事务

在默认配置中,Spring框架的事务基础结构代码仅在运行时,未经检查的异常的情况下将事务标记为回滚。也就是说,当抛出的异常是RuntimeException的实例或子类时。(默认情况下,错误也会导致回滚)。从事务方法引发的检查异常不会导致默认配置中的回滚。

或看看 DefaultTransactionAttribute

public boolean rollbackOn(Throwable ex) {
    return (ex instanceof RuntimeException || ex instanceof Error);
}
2020-04-21