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

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

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

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

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

也可以看出来一些。

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

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

 

posted @ 2022-08-11 13:21  0o飞行天下o0  阅读(889)  评论(0编辑  收藏  举报