zoukankan      html  css  js  c++  java
  • Spring 事务传播行为(12)

    事务传播行为

      指定是Spring中一个事务方法调用另一个事务方法时。处理的行为

    使用方式:

    @Transactional(propagation=Propagation.REQUIRED)

    事务的使用过程中,用的最多的传播行为是require,在大部分的mis系统里,可以对整个业务层切一个require的事务就可以满足需要。但spring提供的不仅如此,对于复杂的业务,Spring也提供了相应的事务传播行为来满足业务需要。

    Spring中的传播行为如下:

      Require:支持当前事务,如果没有事务,就建一个新的,这是最常见的;

      Supports:支持当前事务,如果当前没有事务,就以非事务方式执行;

      Mandatory:支持当前事务,如果当前没有事务,就抛出异常;

      RequiresNew:新建事务,如果当前存在事务,把当前事务挂起;

      NotSupported:以非事务方式执行操作,如果当前存在事务,就把事务挂起;

      Never:以非事务方式执行,如果当前存在事务,则抛出异常。

      Nested:新建事务,如果当前存在事务,把当前事务挂起。与RequireNew的区别是与父事务相关,且有一个savepoint。

      其中,Require、Supports、NotSupported、Never两个看文字也就能了解,就不多说了。而Mandatory是要求所有的操作必须在一个事务里,较Require来说,对事务要求的更加严格。

      RequireNew:当一个Require方法A调用RequireNew方法B时,B方法会新new一个事务,并且这个事务和A事务没有关系,也就是说B方法出现异常,不会导致A的回滚,同理当B已提交,A再出现异常,B也不会回滚。

      Nested:这个和RequireNew的区别是B方法的事务和A方法的事务是相关的。只有在A事务提交的时候,B事务都会提交。也就是说当A发生异常时,A、B事务都回滚,而当B出现异常时,B回滚,而A回滚到savepoint,如下代码所示:

    复制代码
     1 public void A(){
     2     //操作1
     3     //操作2
     4     //操作3
     5     try{
     6         //savepoint
     7         B();//一个Nested的方法
     8     } catch{
     9         //出现异常,B方法回滚,A方法回滚到
    10         //savepoint,也就是说操作1、2、3 都还在
    11        C();
    12     } finally{
    13  
    14     }
    15  
    16 }   
    复制代码
  • 相关阅读:
    CSS3 target伪类简介
    不用position,让div垂直居中
    css3 在线编辑工具 连兼容都写好了
    a标签伪类的顺序
    oncopy和onpaste
    【leetcode】1523. Count Odd Numbers in an Interval Range
    【leetcode】1518. Water Bottles
    【leetcode】1514. Path with Maximum Probability
    【leetcode】1513. Number of Substrings With Only 1s
    【leetcode】1512. Number of Good Pairs
  • 原文地址:https://www.cnblogs.com/weiqingfeng/p/9498132.html
Copyright © 2011-2022 走看看