码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Spring中事务的传播机制以及REQUIRED、REQUIRES_NEW、NESTED区别以及代码演示


    ​📒个人主页:热爱生活的李📒
    ​❤️感谢大家阅读本文,同时欢迎访问本人主页查看更多文章​❤️
    🙏本人也在学习阶段,如若发现问题,请告知,非常感谢🙏

    事务隔离级别+demo理解

      • A 有事务, B 使用 REQUIRED 级别
        • A 有异常 + B 有异常
        • A 有异常 + B 没有异常
        • A 没有异常 + B 有异常
        • A 没有异常 + B 没有异常
      • A 没有事务, B 使用 REQUIRED 级别
        • A有异常 + B有异常
        • A没有异常 + B有异常
        • A有异常 + B没有异常
      • A 有事务,B使用REQUIRES_NEW级别
        • A有异常 + B 有异常
        • A 有异常 + B 没有异常
        • A没有异常 + B有异常
      • A 没有事务,B使用REQUIRES_NEW级别
      • A 有事务,B使用NESTED级别
        • A有异常 + B有异常
        • A 有异常 + B 没有异常
        • A没有异常 + B有异常
      • A 没有事务,B使用NESTED级别
      • A 有事务,B使用SUPPORTS级别
      • A没有事务,B使用SUPPORTS级别
      • A有事务,B使用NOT_SUPPORTED级别
        • A有异常 + B有异常
        • A有异常 + B没有异常
        • A没有异常 + B有异常
      • A没有事务,B使用NOT_SUPPORTED级别
      • A有事务,B使用MANDATORY级别
      • A没有事务,B使用MANDATORY级别
      • A有事务,B使用NEVER级别
      • A没有有事务,B使用NEVER级别
      • 如何确定A有事务,B使用REQUIRED级别时候是合并到一个事务
      • 如何确定A 有事务,B使用REQUIRES_NEW级别时候是两个事务
      • 如何确定A 有事务,B使用NESTED级别时候是两个事务
      • 如何确定REQUIRES_NEW与NESTED级别下的两个事务的类型不一样
        • 查看建立连接的过程
        • 打断点看事务提交记录(都没有异常)
      • 所以REQUIRES_NEW与NESTED级别下都有两个事务的模型

    学会Spring中事务的传播机制 + demo演示
    事务的传播,是指一个方法调用另一个方法并将事务传递给它。事务的转播机制主要针对被调用者而言,控制它是否被传播或者被怎样传播。

    在这里插入图片描述

    在这里插入图片描述

    演示都是基于A 调用 B

    A 有事务, B 使用 REQUIRED 级别

    A 和 B 事务合并为一个事务 ,有异常两个都回滚

    A 有异常 + B 有异常

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    数据库中没有添加 A 数据也没有添加 B 数据

    A 有异常 + B 没有异常

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    数据库中没有添加 A 数据也没有添加 B 数据

    A 没有异常 + B 有异常

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    数据库中没有 A 数据也没有 B 数据

    A 没有异常 + B 没有异常

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    数据库中有A 数据 也有 B数据

    ps:后面不再演示A 没有异常 + B没有异常,因为没有异常肯定成功了

    A 没有事务, B 使用 REQUIRED 级别

    B 按照有事务运行,A 按照没有事务运行

    A有异常 + B有异常

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    数据库中有A 数据 没有 B数据

    A没有异常 + B有异常

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    数据库中有 A 的数据 ,没有B 的数据

    A有异常 + B没有异常

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    数据库 A 有数据,B也有数据

    A 有事务,B使用REQUIRES_NEW级别

    相当于新建了一个事务,但是影响关系是不一样的,A 不能影响 B ,但是 B 可以影响 A

    A有异常 + B 有异常

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    数据库中没有 A 数据 也没有 B数据

    A 有异常 + B 没有异常

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    数据库中有 B数据没有 A数据

    A没有异常 + B有异常

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    数据库中没有 A 数据也没有 B数据

    A 没有事务,B使用REQUIRES_NEW级别

    相当于A没有事务 + B使用 REQUIRED级别事务

    A 有事务,B使用NESTED级别

    A有异常 + B有异常

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    数据库中没有 A 数据也没有B 数据

    A 有异常 + B 没有异常

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    数据库没有 A数据也没有 B数据

    A没有异常 + B有异常

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    数据库中没有 A 数据也没有 B数据

    A 没有事务,B使用NESTED级别

    与REQUIRED相同

    A 有事务,B使用SUPPORTS级别

    与REQUIRED级别中 A 有事务 类似,A 有事务就加入事务A

    A没有事务,B使用SUPPORTS级别

    相当于 A不使用事务 ,B也不使用事务

    A有事务,B使用NOT_SUPPORTED级别

    A有异常 + B有异常

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    数据库中没有数据A但是有数据B

    A有异常 + B没有异常

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    数据库中有数据A没有数据B

    A没有异常 + B有异常

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    数据库中有B数据没有A数据

    A没有事务,B使用NOT_SUPPORTED级别

    相当于A没有事务,B也没有事务

    A有事务,B使用MANDATORY级别

    相当于A有事务,B使用REQUIRED级别

    A没有事务,B使用MANDATORY级别

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    抛异常,不能运行

    A有事务,B使用NEVER级别

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    抛异常,不能运行

    A没有有事务,B使用NEVER级别

    相当于A没有事务,B也没有事务

    如何确定A有事务,B使用REQUIRED级别时候是合并到一个事务

    假设是两个事务

    在这里插入图片描述

    在这里插入图片描述

    如何是两个事务
    那么在我try-catch过后,方法A会执行成功

    在这里插入图片描述

    执行失败,所有required是合并为了一个线程

    如何确定A 有事务,B使用REQUIRES_NEW级别时候是两个事务

    测试方法同上

    在这里插入图片描述

    在这里插入图片描述

    结果

    执行成功,并且只有数据库中只有A的值没有B的值

    在这里插入图片描述

    在这里插入图片描述

    如何确定A 有事务,B使用NESTED级别时候是两个事务

    在这里插入图片描述

    在这里插入图片描述

    结果

    数据库中有A没有数据B

    在这里插入图片描述

    如何确定REQUIRES_NEW与NESTED级别下的两个事务的类型不一样

    查看建立连接的过程

    REQUIRES_NEW级别下建立了两个连接
    在这里插入图片描述

    NESTED级别下只建立了一个连接

    在这里插入图片描述

    打断点看事务提交记录(都没有异常)

    REQUIRES_NEW级别下

    打了三个断点

    在这里插入图片描述

    在这里插入图片描述

    调试过程

    到第一个断点

    数据库中都没有数据

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    到第二个断点

    数据库中还是没有数据

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    到第三个断点

    methodB方法中的事务以及提交了
    而methodA方法中事务还没有提交

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    运行完毕

    数据库中已经有了methodA和methodB方法传入的数据

    在这里插入图片描述

    在这里插入图片描述

    NESTED级别下

    同样地方位置三个断点,只改methodB的事务级别,我把数据库中刚才那两条数据删除了

    到第一个断点

    数据库中没有A,B方法的数据

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    到第二个断点

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    到第三个断点

    还是没有数据,但是REQUIRES_NEW级别下已经有B方法的数据了
    这会数据库里面没有数据,说明methodB的事务还没有提交

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    到运行完毕

    已经有数据了,说明A、B两方法的事务是同时提交的

    在这里插入图片描述

    在这里插入图片描述

    所以REQUIRES_NEW与NESTED级别下都有两个事务的模型

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    Linux软件包常见的几种下载、安装方法
    C语言基础知识
    LeetCode 1805. 字符串中不同整数的数目
    打表找规律与分析判断:ARC144C
    软件工程理论与实践 (吕云翔) 第六章 面向对象分析课后习题及其解析
    VUE条件渲染
    uni-app 高度自适应
    Hadoop_HDFS(二):Shell操作之文件的管理(上传下载删除等)
    使用spring boot集成shardingsphere分库分表简易测试
    Linux运维:磁盘分区与挂载详解
  • 原文地址:https://blog.csdn.net/weixin_51538712/article/details/127363760
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号