zoukankan      html  css  js  c++  java
  • 阶段一-01.万丈高楼,地基首要-第2章 单体架构设计与准备工作-2-25 详解事务的传播-2

    Requires_new

    会创建一个新的事务,并且会挂起当前的事务(如果当前存在的话),

    先把父方法的事务去掉

    在子方法里面用Requires_New

    数据库内是没有数据的

    运行测试方法。这个时候报错了。


    数据库内有一条数据

    相当于保存了第一个方法的数据

    子方法有事务,进行了自动的回滚


    开启父方法的事务。


    数据库内数据清空。

    运行测试,数据库内并没有数据。

     子方法进行了回滚,回滚后本身会有一个 by/zero的异常。

    这个异常会被父方法这里拿到。拿到后就会影响saveParent的保存。它也会被回滚。 看似两个都使用了Required


    先把子方法的异常代码注释掉


    把异常的代码放在,这里。


    saveChildren是没有异常的。但是在它的父级里面是有异常的。
    运行测试。
    数据库内数据。


    事务被挂起后,不会影响它的子方法,子方法里面使用的是一个新的事务,

    所以saveParent会被回滚。


    如果子方法这里,换成Required的话。父方法也用required。如果当前的调用方带事务的话,子方法会加入到这个事务里面。也就是两个方法共用一个事务。


    运行测试。数据库没有值。


    这是因为我们这两个方法共用了一个事务。异常不管在哪个方法里面抛出,都会回滚。

    requires_new回滚

    NotSupports和Never

    当我们要去运行一个方法的时候,以一种没有事务的形式去运行,如果它当前存在一个事务的话,它就会挂起。也就是说不管我当前有没有事务,我自己特立独行, 我仅仅使用一个没有事务的形式去执行我相应的语句。

    代码演示

    父方法的事务先注释掉

    子方法内,使用Not_supports然后,异常的代码开启。

    现在父方法没有事务,子方法是not_supports,也就是子方法不使用事务,
    运行事务,


    数据库内数据

    虽然抛出了异常,但是没有回滚。

    开启父方法事务



    再来运行测试。

    也就是saveChild1保存了数据。

    虽然子方法抛出了异常,但是父方法有事务回滚。自己的saveParent方法被回滚。

    not_siuppots 总结

    Never

    没有事务的形式去执行,一旦发现调用方有事务存在,它会抛出一个异常。


    如果我们在子方法内使用Never

    父方法使用了Required


    运行测试类。


    抛出的异常。找到一个存在的事物, 用了Never调用方不允许使用事物。



    父方法的事务注释掉。


    这个时候就会抛出我们自己代码的异常


    never总结

    结束



     

  • 相关阅读:
    剖析 GSM 加密机制以及位置更新的过程
    利用ASK/OOK 发射模块,实现信号重放
    使用RTL-SDR打开车门
    复现 360 Unicorn Team 黑科技之 HackNFC
    如何搭建并使用便携式 4G/LTE 伪基站研究移动安全
    如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证
    黑客炼金术士 Seeker:可以攻破 4G 摸到你短信,还要为朝阳群众提供谍战工具
    如何使用HackRF做一个简单的IMSI捕获器
    招中高级web开发工程师
    ionic 动画和返回按钮
  • 原文地址:https://www.cnblogs.com/wangjunwei/p/12051178.html
Copyright © 2011-2022 走看看