zoukankan      html  css  js  c++  java
  • Spring事务传播机制

    在@Transcation( propagation = “传播机制”)

    1、 PROPAGATION_REQUIRED (默认,不填)

      a)        支持当前事务,如果当前没有事务,则新建事务。

      b)        如果当前存在事务,则加入事务,合并成一个事务。

    例子:

      1)        父方法A(带有事务)中有子方法B(没带事务),如果方法A中抛出异常,那么方法A、B都会进行事务回滚。

      2)        父方法(没带事务)中有子方法B(带有事务),若方法B中抛出异常,那方法A、B也都会回滚。

    2、 REQUIRES_NEW

      a)        新建事务,如果当前存在事务,则把当前事务挂起。

      b)        这个方法会独立提交事务,不受调用者(父方法)的事务影响,即使父方法异常,他也能正常提交。

    例子:

      1)        父方法A(带有事务)中有子方法B(带事务),方法A抛出异常,若方法B使用@Transcation = REQUIRES_NEW,那么方法B不会因为父方法A的异常回滚而回滚,方法B会正常提交。

    3、 NESTED

      a)        如果当前存在事务,它将会成为父级的一个子事务,方法结束后并没有提交,只是等待父事务结束才提交。

      b)        如果当前没有事务,则新建事务。

      c)         如果它本身异常,父级可以捕获到它的异常,而不进行回滚。正常提交。

      d)        但是如果父级异常,它必然回滚这就是和上面REQUIRES_NEW的区别。

    例子:

             父级方法A(带事务)中 有子方法B(带事务,且propagation属性值为NESTE)。如果方法B有异常,父级方法A并不会因此回滚。但是如果方法A有异常,那么A、B方法都会因此而回滚。

    4、 SUPPORTS

      a)        如果当前存在事务,则加入事务。

      b)        如果当前不存在事务,则以非事务方式进行。

    例如:

      父级方法A(带事务)中 有子方法B(无事务),那B将加入A事务中。

    5、 NOT_SUPPORTS

      a)        已非事务方式进行

      b)        如果当前存在事务 ,则把当前事务挂起

    6、 MANDATORY

      a)        如果当前存在事务,则运行在当前事务中。

      b)        如果当前无事务,则抛异常,也即父级方法必须有事务

    7、 NEVER

      a)        以非事务方式运行,如果当前存在事务,则抛出异常,即父级方法必须无事务。

  • 相关阅读:
    GyPSii API PHP应用初探
    无缝滚动图片的一个简单封装
    Linux设置固定IP
    DIV卷帘效果示例
    vsftp安装配置
    PHP判断FORM来的数据是否为整数
    Linux下设置apache开机启动
    从Discuz提取的数据库和模板操作文件,很容易使用哦
    discuz 表情的提取
    IE6、IE7浮动层被下面的动挡住的问题
  • 原文地址:https://www.cnblogs.com/buzheng/p/12493130.html
Copyright © 2011-2022 走看看