其他分享
首页 > 其他分享> > @Transactional注解中rollbackFor有什么作用?

@Transactional注解中rollbackFor有什么作用?

作者:互联网

先说结论吧,预防某些异常不是spring预想的异常,而导致事务没有进行回滚。

一般情况下,代码执行报错都会自动抛异常,而这个异常基本都是继承了Runtimeexception,在源码中也有相应内容,所以此时sql执行失败,会进行回滚。

假如抛出的异常不是Runtimeexception类型的异常,或者是和他是平级的异常,并且没有在注解中加入rollbankFor  那么此时可能就无法回滚了,源码中

也有相应体现。其实这个rolllbackFor目的就是为了扩大异常范围,在更大范围可以进行事务回滚而设立的一套机制。从使用时(rollbackFor=Exception.class)

也可以看出来一些。

避坑点有一个:如果代码中要抛出自定义异常,并且要求把事务进行回滚,那么就需要指定  rollbackFor=自定义异常  了。否则不会回滚,源码也有体现的,入口就是

代理transactioninteceptor中的invoke,详细的可根据代码推进,截图关键部分。

 

标签:回滚,事务,Runtimeexception,Transactional,rollbackFor,源码,注解,异常
来源: https://www.cnblogs.com/zxg-blog/p/16575731.html