需求:需要捕获到@Transactional中的异常,并不影响事物回滚
@Transactional(rollbackFor = Exception.class)
public void test() {
try {
updata();
updata2();
}catch (Exception e) {
e.printStackTrace();
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//如果updata2()抛了异常,updata()会回滚,不影响事物正常执行
}
注释:Exception分为运行时异常RuntimeException和非运行时异常
使用(rollbackFor=Exception.class)与不使用的区别
1.在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
2.在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚
评论区