博客
关于我
Spring事务的两种常用传播方式
阅读量:479 次
发布时间: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/

    你可能感兴趣的文章
    软考考点之前趋图与并发执行
    查看>>
    软考考点之软件质量管理及MCCALL
    查看>>
    关于加入stm32l4XX_flash.c出错的问题
    查看>>
    PTZ控制协议
    查看>>
    学习笔记之——深度强化学习(Deep Reinforcement Learning)
    查看>>
    linux系统下双屏显示
    查看>>
    基于linux的VScode开发
    查看>>
    关于高斯模糊核
    查看>>
    实验笔记之——octave layer(4路数据)
    查看>>
    PDF.js —— vue项目中使用pdf.js显示pdf文件(流)
    查看>>
    vue源码解析 —— 数据绑定
    查看>>
    vue 中遍历对象显示的顺序不对
    查看>>
    JS单线程的理解
    查看>>
    vue引入font awesome 及webpack打包后图标不显示的问题
    查看>>
    vue解决数据更新,界面未更新的方法
    查看>>
    基于Ajax技术的前后端Json数据交互方式实现
    查看>>
    量化交易之股票数据的获取——Pandas API接口
    查看>>
    我用wxPython搭建GUI量化系统之wx.grid实现excel功能
    查看>>