侧边栏壁纸
博主头像
此昵称不存在 博主等级

行动起来,活在当下

  • 累计撰写 35 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Spring事务的传播特性

Administrator
2023-01-24 / 0 评论 / 0 点赞 / 104 阅读 / 0 字 / 正在检测是否收录...

什么是事务传播特性

简单理解 即 A方法调用B方法时,B方法的事务应该如何执行
例如:转账案例 转出 与 转入 拆封成两个方法,当转出方法去调用转入方法时,转入方法的事务应该如何去控制

Spring事务的七大传播级别

spring给出的七大传播级别,总结 共分为三大类如下

死活不要事务

  1. Propagation.NEVER 没有事务就非事务正常运行,如果有事务则抛出异常image-1674568745182
  2. Propagation.NOT_SUPPORTED 没有事务就非事务运行,如果存在A方法存在事务,就挂起A方法的事务,B方法(被调用者)已非事务的方式运行。如果A、B方法操作的同一张表,且SQL没有走索引,会导致表锁,如果走了索引则是行级锁,表锁会导致A中事务挂起等待,B尝试获取锁却无法获得出现死锁的情况,最终会导致锁等待异常,可在注解中设置超时时间
    image-1674569146759

可有可无型

propagation = Propagation.SUPPORTS A方法有事务B方法就跟A使用同一个事务,A方法没有事务则以非事务运行

必须得有事务型

  1. Propagation.REQUIRES_NEW A方法没有事务则B就新建事务,此时B回滚A不回滚,若A方法有事务则挂起A的事务,B方法新建事务。
  2. Propagation.NESTED 如果A方法有事务,则在A方法的事务里面嵌套新建一个事务,如果A方法没有事务,则B方法新建事务 嵌套事务:当大事务(A方法)出现异常全部回滚,当子事务(B方法)出现异常 仅回滚子事务,大事务不受影响
  3. Propagation.REQUIRED Spring的默认事务传播级别,如果没有就新建事务,如果有则加入当前事务(满足大部分使用场景)
  4. Propagation.MANDATORY 没有事务则抛出异常,有事务则加入当前事务image-1674570620963
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区