我想知道使用代替
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
使用 Throwable
Throwable
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Throwable.class)
据我了解Error,即使发生了某些非常糟糕的事件,捕获也会帮助我们正确地进行行为。还是没有帮助?
Error
据我了解,即使发生某些非常糟糕的事件,捕获错误也会帮助我们正确地执行操作。还是没有帮助?
你不需要显式指定rollbackFor = Throwable.class,因为默认情况下,如果Error发生交易,spring会默认回滚事务。
rollbackFor = Throwable.class
请参见12.5.3回滚声明式事务
在默认配置中,Spring框架的事务基础结构代码仅在运行时,未经检查的异常的情况下将事务标记为回滚。也就是说,当抛出的异常是RuntimeException的实例或子类时。(默认情况下,错误也会导致回滚)。从事务方法引发的检查异常不会导致默认配置中的回滚。
或看看 DefaultTransactionAttribute
DefaultTransactionAttribute
public boolean rollbackOn(Throwable ex) { return (ex instanceof RuntimeException || ex instanceof Error); }