zoukankan      html  css  js  c++  java
  • spring事物传播propagation各类别含义

    在spring事务中针对注解transaction,我们在定义的时候会注明事物的传播类别,默认的是required。

      required:使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法必须运行在一个事务,如果当前存在事务,则加入这个事务,成为一个整体。

      ex:领导没饭吃,我有钱,我自己买了自己吃;领导有饭吃,会分给我一起吃。

      supports:如果当前有事务,则使用事务;如果当前没有事务,则不使用事务。

      ex:领导没饭吃,我也没饭吃;领导有饭吃,我也有饭吃。

      mandatory:该传播必须存在一个事务,如果不存在则抛出异常。

      ex:领导必须管饭,不管饭没饭吃,我超级不开心,老子不干了(抛出异常)。

      requires_new:如果当前有事务,则挂起该事物,并且自己创建一个新的事务给自己使用;如果当前没有事务,则跟required一样

      ex:铃铛有饭吃,我看不上,不要,我自己买着自己吃。

      not_supported:如果当前有事务,则挂起事务,自己不使用事务去运行数据库操作。

      ex:领导有饭吃,分给我吃,我不要放一边,我不吃。

      never:如果当前事务存在,则抛出异常。

      ex:领导有饭吃,我不想吃,不想让领导也吃,我抛出异常。

      nested:如果当前有事务,则开启子事务(嵌套事务),嵌套事务式独立提交或者回滚;

         如果当前没有事务,则跟required一样;

            如果主事务提交,则会携带子事务一起提交;

            如果主事务回滚,则子事务会一起回滚。相反子事务异常,父事务可以回滚或者不会滚(try cache捕获了子事务的异常)。

         ex:领导决策不对。老板怪罪,带着小弟我一起受罪。小弟我出现差错,领导可以选择推卸责任或者帮我一起承担。

    测试代码结构:

    //这里注明主事物的传播类型

    public void 主事务(领导) save(){

      主事务save();

      子事务1save();

      子事务2save();

    }

    //子事务注明事物的传播类型

    public void 子事物1(我)save(){

      save1();

      1/0;//此处抛异常

    }

    public  void 子事务2(我)save(){

      save2();

    }

  • 相关阅读:
    mysql 日志
    mysql 事务中的锁
    mysql 事务的日志
    mysql 核心事务特性
    mysql 断电导致表打不开解决方案
    mysql 数据库逻辑升级
    mysql innodb存储引擎的表空间
    IDEA常用代码模板
    springcloud-GateWay常用的Predicate
    springcloud-GateWay配置动态路由
  • 原文地址:https://www.cnblogs.com/id-tangrenhui/p/12084188.html
Copyright © 2011-2022 走看看