当前位置: 首页 > article >正文

一文讲解Spring中事务的传播机制

什么是Spring中的是事务传播机制呢?

  • 事务的传播机制定义了方法在被另一个事务方法调用时的事务行为,这些行为定义了事务的边界和事务上下文如何在方法调用链中传播。
    在这里插入图片描述

  • Spring 的默认传播行为是 PROPAGATION_REQUIRED,即如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

  • 事务传播机制是使用ThreadLocal实现的,所以,如果调用的方法是在新线程中,事务传播会失效

    @Transactional
    public void parentMethod() {
        new Thread(() -> childMethod()).start();
    }
    
    public void childMethod() {
        // 这里的操作将不会在 parentMethod 的事务范围内执行
    }
    

    Spring 默认的事务传播行为是 PROPAFATION_REQUIRED,即如果多个 ServiceX#methodX() 都工作在事务环境下,且程序中存在这样的调用链 Service1#method1()->Service2#method2()->Service3#method3(),那么这 3 个服务类的 3 个方法都通过 Spring 的事务传播机制工作在同一个事务中。

protected和private加事务会生效吗?

  • 在 Spring 中,只有通过 Spring 容器的 AOP 代理调用的公开方法(public method)上的@Transactional注解才会生效

  • 如果在 protected、private 方法上使用@Transactional,这些事务注解将不会生效,原因:Spring 默认使用基于 JDK 的动态代理(当接口存在时)或基于 CGLIB 的代理(当只有类时)来实现事务。这两种代理机制都只能代理公开的方法。


http://www.kler.cn/a/536916.html

相关文章:

  • Spring Boot Web 入门
  • 【Kubernetes Pod间通信-第1篇】在单个子网中使用underlay网络实现Pod到Pod的通信
  • Games104——游戏引擎Gameplay玩法系统:基础AI
  • 485网关数据收发测试
  • 面向对象程序设计-实验2
  • 第16章 Single Thread Execution设计模式(Java高并发编程详解:多线程与系统设计)
  • vue组件间的数据传递:自定义输入组件(v-model/defineModel)
  • Android显示原理
  • SqlServer查看锁表与解锁
  • 零基础构建开源项目OpenIM桌面应用和pc web- Electron篇
  • 备赛蓝桥杯之第十五届职业院校组省赛第四题:多表单校验
  • Android开发签名校验
  • 新能源产业的质量革命:六西格玛培训如何重塑制造竞争力
  • uniapp实现人脸识别(不使用三方插件)
  • ISP代理与住宅代理的区别
  • MySQL——数据库的操作
  • 【重新认识C语言----文件管理篇】
  • 【面试场景】MySQL分布式主键选取
  • C++,设计模式,【单例模式】
  • NetCore Consul动态伸缩+Ocelot 网关 缓存 自定义缓存 + 限流、熔断、超时 等服务治理 + ids4鉴权
  • 学习率调整策略 | PyTorch 深度学习实战
  • IntelliJ IDEA新版本的底部version control(或git)里local change窗口显示配置修改详细教程
  • PHP填表统计预约打卡表单系统小程序
  • 配置GitHub和PicGo的详细步骤
  • 通过Python编写的中国象棋小游戏
  • mac 安装 dotnet 环境