• Spring事务的传播机制


    Spring事务的传播机制是指 多个事务方法互相调用时(如当A类a方法调用B类中的b方法时,那么B类中的b方法是按b方法的事务还是A类中a方法的事务来执行),事务如何在这些方法之间进行传播。在事务的管理过程中,传播行为可以控制是否需要创建事务以及事务如何创建。Spring提供了7种不同的传播特性来保证事务的正常执行。

    事务的类型

    事务的作用

    Required(必须的)

    默认的传播特性,如果当前没有事务,则新建事务,否则加入这个事务。

    例如:a方法调用b方法,如果a方法存在事务,则b方法就按a方法的事务来执行,如果a方法不存在事务,那么b方法就自己新建事务

    Supports(支持的)

    如果当前存在事务,则加入当前事务,否则以非事务的方式执行,

    例如:a方法调用b方法,如果a方法存在事务,那么b方法就按a方法的事务来执行,如果a方法不存在事务,那么b方法就以非事务的方法执行

    Mandatory(强制的)

    如果当前存在事务,则加入事务,否则抛出异常

    例如:a方法存在事务,那么b方法就按a方法的事务来执行,如果a方法不存在事务,那么b方法就抛出异常

    Required_new

    创建一个新事务,如果当前存在事务,则挂起事务。

    例如:如果a方法存在事务,那么a方法自己的事务就会被挂起,然后b方法就会创建自己新的事务来执行。如果a方法不存在事务,b方法也是新建事务来执行

    Not_supported

    以非事务的方式执行,如果当前存在事务,则挂起事务。

    例如L不管a方法存不存在事务,b方法都是以非事务的方式执行

    Never

    不使用事务,如果当前存在事务,则抛出异常

    例如:a方法存在事务,那么b方法会抛出异常。如果a方法不存在事务,那么b方法按非事务的方式执行

    Nested

    如果当前事务存在,则嵌套在事务中执行,否则和Required的操作一样

    例如:a方法调用b方法,如果a方法当前存在事务,则会在a方法的事务执行过程中设置一个保存点,然后b方法会按a方法的事务执行,如果b方法执行失败,则会回滚到之前设置的保存点,否则b方法自己新建事务来执行。

    🐂 挂起事务:所谓挂起事务是指,比如有两个方法AB,A方法支持事务,B方法不支持事务,那么A方法中对于数据库的操作是在事务的控制下完成的,而在A方法中调用B方法,那么A方法中开启的事务会挂起,B方法中的数据库操作不在事务的控制下完成,当B方法执行完成返回后,A方法继续在事务的控制下进行相关的数据库操作。

    Required和Required_new的区别: Required_new是新建一个事务并且新开启的事务和原有的事务无关,而Required则是如果当前没有事务,则新建事务,否则加入这个事务。

    Nested和Required的区别: Required情况下,调用方a存在事务时,则被调用方b和调用方a使用同一个事务,那么被调用方b出现异常时,由于共同使用同一个事务,所以无论是否捕获异常,事务都会回滚,而在Nested下,被调用方b发生异常时,调用方a可以捕获异常,这样只有子事务回滚,父事务不会回滚。

  • 相关阅读:
    Leetcode:前缀和系列
    SpringMVC系列-4 参数解析器
    Flink原理与实现:数据交换策略
    详解数据结构——二叉排序树
    Linux基本命令——Vim编辑器
    录屏软件用什么好?直播会议用什么录屏软件?
    深度学习之GPU显存与利用率 浅析小结
    【数据集NO.4】遥感图像数据集汇总
    跟着官方学电机,BLDC两种控制策略,学到即赚到
    用HTML+CSS做一个简单好看的汽车网页
  • 原文地址:https://blog.csdn.net/m0_58438555/article/details/126085471