1、首先来看下rollbackFor = Exception.class的作用,看代码
![](https://img.haomeiwen.com/i9546067/a57e49cf45d14c56.png)
只有加上rollbackfor=Exception.class才可以针对Exception异常进行回滚,否则只能对RuntimeException进行回滚。
2、catch 住的异常还能否回滚?
2.1 catch代码块里边声明了rollbackfor
由于aop切面管理事务,异常发生后spring会捕获到异常,并进行回滚处理,
2.2 catch代码块里边未声明rollbackfor
我们都知道用try catch 包括的事务,如果该事务发生了异常,那么该事务不会回滚。那么怎么样才能做
到让他可以回滚呢,看如下代码。
![](https://img.haomeiwen.com/i9546067/9a6131aa95cfec8c.png)
需要在catch里边抛出异常,一般来说需要抛出RuntimeException即可。
总结,transaction默认是针对RuntimeException进行回滚,如果要想对Exception回顾进行回顾,则需要加上rollbackFor = Exception.class。对于catch住的异常,如果catch块里边有rollbackfor,则异常会自动回滚,否则需要new RuntimeException或者自定义异常抛出。
网友评论