问题解决32:加上了@Transaction注解什么时候才会回滚?

@Tranaction

Spring中有声明式事务和编程式事务,

加上了@Tranaction表示,把当前的事务管理交给Spring来管理,叫做声明式事务

而程序员自己手动进行事务回滚(如AOP拦截异常进行事务回滚)
如下,是手动事务也就是编程式事务


//手动进行回滚
 TransactionAspectSupport.currentTransactionStatus()
 .setRollbackOnly();

我们有时候在代码上看到

@Transactional(rollbackFor = Exception.class) 为什么后面要加 rollbackFor?
答:
因为
在这里插入图片描述
@Transaction 时默认为RuntimeException(也就是运行时异常)异常才会回滚。

源码上有明确的描述。

所以我们有时候出现其他检查性异常的时候就不会进行回滚。

这个时候有两种解决方案:
可以使用编程式事务,也就是手动事务,通过aop拦截,进行事务的回滚


//手动进行回滚
 TransactionAspectSupport.currentTransactionStatus()
 .setRollbackOnly();

2、在@Transaction加上rollbackFor=Exception.class,也就是所有的异常都会进行回滚。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章