Spring事务传播性详解

Spring事务传播性详解

       关于事务传播性,主要是指在父事务中执行子事务时,子事务的表现特征。Spring支持的事务传播性主要有如下几个:

  • REQUIRED:表示当前方法在执行时必须要在某个事务中执行,如果当前方法已经存在于某个事务序列中,那么就继承该事务序列的配置,否则就会新建一个事务供当前方法执行;
  • SUPPORTS:表示当前方法提供对事务的支持,如果没有事务也可以继续执行。也就是说调用当前方法的序列如果存在事务,当前方法就继承该事务,如果不存在事务,当前方法的执行也不会有事务;
  • MANDATORY:表示当前方法的执行必须是在某个事务序列中,如果不是,则会抛出异常,其和REQUIRED不同的是,其不会新建事务供自己执行;
  • REQUIRES_NEW:表示当前方法的执行必须在一个新的事务中执行,无论是否已经存在某个事务序列;
  • NOT_SUPPORTED:表示当前方法的执行不支持事务,如果当前方法在某个事务序列中,那么就会挂起该事务,以保证当前方法的执行不存在事务,待当前方法执行完成后才会继续执行挂起的事务;
  • NEVER:表示当前方法的执行不允许存在事务,如果当前方法在某个事务序列中,则抛出异常;
  • NESTED:表示当前方法的执行将会在一个新建的嵌套事务中执行。

       关于上述几种事务的传播性,这里主要需要说明的是嵌套事务。嵌套事务指的是,在某个事务序列中新建一个子事务执行子事务序列,父事务与子事务是一体的,只要有任意一个子事务失败,整个事务(包括父事务和所有的子事务)都会失败。Spring是使用保存点的方式实现的嵌套事务,所谓的带保存点的事务指的是在进行事务事务处理的时候,可以使用保存点进行部分回滚。比如某个事务S,其中有三个保存点S1、S2和S3,如果在S3之后事务执行失败,那么调用方是可以选择具体回滚到某个保存点的,这种方式就给事务的执行带来了很大的灵活性,因为很多时候整个事务是不需要完全回滚的。这里由于嵌套事务的定义,即某个子事务执行失败,整个事务都必须回滚,因而Spring虽然使用的是保存点的方式实现事务,但其不会只回滚到某个保存点,而是会回滚整个事务。

       在使用方式上,嵌套事务与REQUIRES_NEW是非常相似的,但也有区别。主要原因在于在子事务中抛出异常时子事务与父事务的表现方式是一样的,而父事务中抛出异常时,两者则存在区别。

项目 REQUIRES_NEW NESTED
父事务与子事务的关系 父事务与子事务是两个完全不相关的事务,子事务执行时父事务会被挂起 子事务是父事务的一部分,子事务执行也表示父事务在执行
子事务异常处理 由于异常会向上传递,因而子事务抛出异常会导致子事务和父事务都会回滚;如果前面还存在其他的REQUIRES_NEW类型的子事务,这些已经完成的事务是不会回滚的 由于子事务是父事务的一部分,因而子事务抛出异常,父子事务都会回滚
父事务抛出异常 由于子事务与父事务是两个不同的事务,因而父事务抛出异常不会导致子事务回滚,而只会导致父事务回滚 由于子事务和父事务是一体的,即使子事务已经执行完成,父事务抛出异常父子事务也都会回滚

转载于:https://my.oschina.net/zhangxufeng/blog/1942450

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101451.html原文链接:https://javaforall.net

(0)
上一篇 2021年6月11日 下午10:00
下一篇 2021年6月12日 上午8:00


相关推荐

  • 用js来实现那些数据结构10(集合02-集合的操作)[通俗易懂]

    前一篇文章我们一起实现了自定义的set集合类。那么这一篇我们来给set类增加一些操作方法。那么在开始之前,还是有必要解释一下集合的操作有哪些。便于我们更快速的理解代码。1、并集:对于给定的两个集合,

    2022年3月25日
    39
  • 内存数据库究竟是如何发挥内存优势的?

    内存数据库究竟是如何发挥内存优势的?内存数据库

    2026年3月20日
    1
  • NOIP2012 疫情控制[通俗易懂]

    NOIP2012 疫情控制[通俗易懂]也许更好的阅读体验Description\mathcal{Description}Description原题链接一句话题意一个人可以堵住一个子树,不能一次堵住整棵树,求堵住每个通往叶子节点的路径,走的最远的那个人走的路程最少是多少,若不能堵住输出−1-1−1Solution\mathcal{Solution}Solution看了下其他题解,都说很毒瘤最开始我也认为很毒瘤就是在决…

    2022年8月22日
    7
  • oracle中schema指的是什么?

    oracle中schema指的是什么?

    2021年11月13日
    74
  • pycharm git使用_pycharm上传github

    pycharm git使用_pycharm上传githubpycharm操作git一、git安装和使用​ 安装操作:https://www.cnblogs.com/ximiaomiao/p/7140456.html1.如何使用git将本地代码上传到远程仓库初始化gitinit查看当前仓库状态gitstatus将项目的文件添加到仓库中gitadd<文件名>gitadd.(上传所有文件)将add的文件commit到仓库gitcommit-m”备注”将本地仓库关联到远程仓库gi

    2022年8月25日
    10
  • 光纤入户网络需求分析及解决方案

    光纤入户网络需求分析及解决方案随着我国城市化建议的不断推进 带动各地城市小区蓬勃发展 并朝向住宅 商店 学校 停车场 商务会所等多功能合一的趋势型态 根据对各小区业主调查发现 小区内如保安 物业管理 网络教育 网上购物等各项设施 都必须要有庞大复杂的网络管理支撑 只有拥有最佳的城市小区网络解决方案 才可以真正满足居民对智能 先进 现代化小区的理想目标 近日 在工信部正式公布的 住宅区和住宅建筑内光纤到户通信设施工程设计规

    2026年3月18日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号