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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • jedis链接redis_redis和jedis关系

    jedis链接redis_redis和jedis关系1.导入jedis包<dependencies> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>3.2.0</version> </dependency> <!–fastjson–> <depend

    2025年10月11日
    2
  • 支付风控模型

    支付风控模型支付风控数据仓库建设 。支付风控涉及到多方面的内容,包括反洗钱、反欺诈、客户风险等级分类管理等。其中最核心的功能在于对实时交易进行风险评估,或者说是欺诈检测。如果这个交易的风险太高,则会执行拦截。由于反欺诈检测是在交易时实时进行的,在要求不能误拦截的同时,还有用户体验上的要求,即不能占用太多时间,一般要求风控操作必须控制在100ms以内,对于交易量大的业务,10ms甚至更低的性能要求都是必须的。

    2022年4月29日
    87
  • 金融投资理财基础知识

    金融投资理财基础知识随着当前金融互联网的兴起,当前的投资理财方式较以前相比,更加的多样化。就不说银行存款了,当下风险最低,收益最低的理财方式,因为通货膨胀,可能存的越久就钱越不值钱。下面主要介绍一下当下比较流行的投资方式: 一银行理财产品各个银行,无论是国有的,还是民营的银行,都有推出自己银行的理财产品。那什么是银行理财产品呢?就是银行开发设计并销售的资金投资和管理计划,银行只接受客户的授权管理资金

    2022年5月8日
    105
  • PHOTOSHOP MAC快捷键

    PHOTOSHOP MAC快捷键工具箱(多种工具共用一个快捷键的可同时按【Shift】加此快捷键选取)矩形、椭圆选框工具【M】裁剪工具【C】移动工具【V】套索、多边形套索、磁性套索【L】魔棒工具【W】喷枪工具【J】画笔工具【B】像皮图章、图案图章【S】历史记录画笔工具【Y】像皮擦工具【E】铅笔、直线工具【N】模糊、锐化、涂抹工具【R】减淡、加深、海棉工

    2022年6月24日
    47
  • java数据库调用「建议收藏」

    1.概念:JavaDatabaseConnectivity java数据库连接​ 本质:其实是官方(SUN公司)提供的一套操作所有关系型数据库的规则(接口),各个数据库厂商会去实现这套接口,产生数据库驱动(Jar包),我们可以使用这套接口(JDBC)编程,真正执行的代码驱动包里的实现类。2.快速入门​ 1.导入jar包 mysql-connector-java-5.1.37-bin….

    2022年4月12日
    65
  • Hadoop切分纯文本时对某一行跨两个分片这种情况的处理

    Hadoop切分纯文本时对某一行跨两个分片这种情况的处理Hadoop切分纯文本时对某一行跨两个分片这种情况的处理

    2022年4月23日
    44

发表回复

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

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