spring事务回滚3-结论

http://mp.blog.csdn.net/postedit/79290257

http://mp.blog.csdn.net/postedit/79290287

通过上面的2篇文章,我总结提到的3种方式关于spring事务回滚的现象,并测试过没问题,便于以后查阅


结论1-针对unchecked exception:

 Spring的事务管理默认是针对unchecked exception回滚,也就是默认对Error异常和RuntimeException异常以及其子类进行事务回滚。(若使用try-catch对其异常捕获则不会进行回滚!Error异常和RuntimeException异常抛出时不需要方法调用throws或try-catch语句,其实这句话是废话);


结论2-针对checked异常

   spring事务默认对checked异常不进行回滚。如果想spring事务支持,其解决方法有3个。如下:

  spring事务支持checked异常---方法1:
       在service层包裹try-catch,在catch语句中添加增加throw new RuntimeException()语句即可,即迎合结论1
 spring事务支持checked异常---方法2:

       在service层包裹try-catch,在catch语句中增加:TransactionAspectSupport.currentTransactionStatus()

扫描二维码关注公众号,回复: 2281326 查看本文章

    .setRollbackOnly();语句,手动回滚

  spring事务支持checked异常---方法2:

    无需加try-catch,直接在所在的service方法上的@Transactional加上rollbackFor ,形        如:@Transactional(rollbackFor = Exception.class)。


结论3-针对Throwable

 spring事务不作为,即无法回滚,解决方法同“结论2”


通过结论3,我们也学到了一个知识,当我们写工具类时,如果出现我们”能处理类型“的”根类型“,应该和“无法处理类型”同等看待,不应该随便选一种”处理类型“来处理,仅代表个人见解


猜你喜欢

转载自blog.csdn.net/rainyspring4540/article/details/79291153