博客
关于我
Spring事务的两种常用传播方式
阅读量:478 次
发布时间:2019-03-07

本文共 1008 字,大约阅读时间需要 3 分钟。

为什么会存在事务传播方式

事务传播方式的存在,是为了管理多个事务之间的关系,特别是在处理嵌套事务时确保事务的正确传播。

在一些简单的场景中,我们只需要一个事务来完成操作。例如,购买一本书时,减少库存和扣除客户余额都属于一个单独的事务。不过,当我们需要购买多本书时,就需要嵌套的事务进行处理。这个嵌套过程中,事务的传播方式非常重要,它决定了当一个事务失败时,其他相关事务的处理方式。

在设计和实施事务传播方式时,最常用到的有两种方式:

它们的实现方式

  • @Transactional(propagation = Propagation.REQUIRED)
  • 用这种方式,当前事务方法会被外层事务方法调用。它默认的是外层的事务作为单元,只要外层中的任意一个操作失败,整个事务都会被终止。这种传播方式简单直接,适用于大部分常见的业务逻辑。

    1. @Transactional(propagation = Propagation.REQUIRES_NEW)
    2. 这种事务传播方式会创建一个新的事务单元。这意味着内层的事务和外层的事务完全隔离。一旦内层的事务完成或者失败,外层的事务不会受到影响。这可以帮助我们在需要同时执行多个独立事务的场景下,保证事务的隔离性和一致性。

      两图解说它们的区别

      ([图片已被去除])

      为了清楚理解这两种事务传播方式的区别,我们来进行对比分析:

    3. Propagation.REQUIRED:使用这种方式时,外层的事务作为单元。当外层的事务中的任意一个操作失败时,整个外层的事务和内层的事务都会被终止。这种方式常用于传统的业务流程,确保事务的全或无。

    4. Propagation.REQUIRES_NEW:这种方式则会为每个需要嵌套的事务创建一个独立的事务单元。一旦内层的事务发生错误,外层的事务不会被影响,而只会将错误的内层事务单独处理。这类似于数据库事务的并行执行,但需要确保事务的隔离性。

    5. 要注意的事项

      • 默认情况下,事务传播方式采用的是Propagation.REQUIRED。-Propagation.REQUIRES_NEW 应该添加在需要嵌套的事务单元上,而不是外层的事务单元上。

      最后,记住的事项

      事务传播方式的选择至关重要。在实际应用中,需要根据具体的业务场景和需求来决定使用哪一种。Propagation.REQUIRES_NEW 的使用通常需要在业务流程的内部进行处理,而不会影响到外层的业务逻辑。

    转载地址:http://hpucz.baihongyu.com/

    你可能感兴趣的文章
    C语言--C语言总结大纲
    查看>>
    轻松理解前后端分离(通俗易懂)
    查看>>
    蚂蚁金服(Java研发岗),26岁小伙斩获三面,收获Offer定级P6
    查看>>
    JavaFX官方文档
    查看>>
    ORA-12154: TNS: 无法解析指定的连接标识符
    查看>>
    Spring学习总结(十二):Spring中的事务管理
    查看>>
    CentOS5 Linux编译PHP 报 mysql configure failed 错误解决办法
    查看>>
    linux时间快8小时解决办法
    查看>>
    G7相关
    查看>>
    Linux 激活网卡ifconfig eth1 up 和 ifup eth1 之间的差别
    查看>>
    In App Purchase Verification using PHP
    查看>>
    Mapper.xml中新增数据并返回主键ID(MYSQL)
    查看>>
    shell编程===》进程锁
    查看>>
    教你如何一招破解简单的joy.dex的卡密系统(Auto.js)
    查看>>
    Linux小操作LVM
    查看>>
    Split返回数组元素含有空字符串移除
    查看>>
    解决VS中C语言运行scanf错误
    查看>>
    Java注解
    查看>>
    idea上的程序报错-> 错误: 找不到或无法加载主类
    查看>>
    java--07整数反转
    查看>>