首页 > 其他分享 >什么是Spring事务传播行为?Spring有哪些事务传播行为?

什么是Spring事务传播行为?Spring有哪些事务传播行为?

时间:2024-02-18 21:25:33浏览次数:33  
标签:事务 Spring 行为 传播 PROPAGATION 当前 方法


Spring事务传播行为是指当一个事务方法(当前事务)被另一个事务方法(调用者)调用时,这个事务方法(当前事务)对另一个事务方法(调用者)的态度。简单来说,就是当一个事务方法A调用了另一个事务方法B时,B应该如何应对。

用伪代码说明:

 public void methodA(){
    methodB();
    //doSomething
 }
 
 @Transaction(Propagation=XXX)
 public void methodB(){
    //doSomething
 }

代码中methodA()方法嵌套调用了methodB()方法,methodB()的事务传播行为由@Transaction(Propagation=XXX)设置决定。这里需要注意的是methodA()并没有开启事务,某一个事务传播行为修饰的方法并不是必须要在开启事务的外围方法中调用。


Spring事务传播行为有七种类型,这些类型决定了当一个事务方法被另一个事务方法调用时,应该如何使用事务。例如:

1. PROPAGATION_REQUIRED(默认传播行为):表示当前方法必须在事务中运行。如果调用者有事务,则当前方法加入到调用者事务中运行。如果调用者没有事务,则当前方法自己新开启一个事务运行。这是最常见的选择。


2. PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
其他的传播行为类型还包括PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED等,每种类型都有其特定的行为规则。


3. PROPAGATION_MANDATORY:强制要求当前存在事务,如果不存在事务,则抛出异常。


4. PROPAGATION_REQUIRES_NEW:重新开启一个新的事务,如果当前存在事务,则挂起该事务。


5. PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,则挂起该事务。


6. PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。


7. PROPAGATION_NESTED:如果当前存在事务,则嵌套事务中执行。如果当前没有事务,就执行REQUIRED行为。

这些传播行为类型提供了灵活的事务控制机制,使得开发者可以根据具体的业务需求,选择合适的事务传播行为。

标签:事务,Spring,行为,传播,PROPAGATION,当前,方法
From: https://www.cnblogs.com/wangxie/p/18005442

相关文章

  • 翻译,师爷师爷什么叫事务!
    当我们学习apple时候,我们很容易记住apple是什么。我们也不会对apple的概念产生模糊混淆。为什么?因为字典上明确说了,apple=苹果。那苹果是什么?苹果就是圆圆的红红的,吃起来甜甜的水果。我们学习apple如此简单,就是因为我们对苹果这个概念的理解已经通透到不能再通透......
  • 928. 尽量减少恶意软件的传播 II
    原题链接我们先根据题意构建图G。然后我们可以得出如果一个普通结点A连接着两个感染源结点,那么其无论如何都会被感染;因此我们要找寻那些只与一个感染源结点相连接的普通节点;然后我们在图中把感染源结点擦除,可以得到几个只由普通结点构成的图,我们把这几张图看作一个集合(即使用并......
  • Spring - 简介
    Spring发展至今,已经形成了一个生态体系(Spring全家桶)  Java web架构演变过程1、Servet+JSP+ JavaBean(跳转页面、业务逻辑判断、数据库查询)2、MVC三层架构(web-跳转页面、service-业务逻辑判断、dao-数据库查询)3、使用EJB进行应用的开发,但是EJB是重量级框架(在使用的......
  • Spring事务实现原理
    1、引言spring的spring-tx模块提供了对事务管理支持,使用spring事务可以让我们从复杂的事务处理中得到解脱,无需要去处理获得连接、关闭连接、事务提交和回滚等这些操作。spring事务有编程式事务和声明式事务两种实现方式。编程式事务是通过编写代码来管理事务的提交、回滚、以及......
  • Java21 + SpringBoot3使用Spring Security时如何在子线程中获取到认证信息
    目录前言原因分析解决方案方案1:手动设置线程中的认证信息方案2:使用DelegatingSecurityContextRunnable创建线程方案3:修改SpringSecurity安全策略通过设置JVM参数修改安全策略通过SecurityContextHolder修改安全策略总结前言近日心血来潮想做一个开源项目,目标是做一款可以适配多......
  • 重学spring-001-IOC
    IOC(InversionofControl)控制反转,它是指一种思想,DI依赖注入是IOC思想的一种实现方法。如果我们只需要完成某一项固定不变的事情,代码是不用考虑扩展解耦的。但是大多数的需求是改了又改的,但是核心的业务是不变的,比如JDBC连接数据库,总的来说就是让程序与数据建立连接......
  • Spring注册Bean系列--方法5:@Import+ImportBeanDefinitionRegistrar
    原文网址:​​Spring注册Bean系列--方法5:@Import+ImportBeanDefinitionRegistrar_IT利刃出鞘的博客-CSDN博客​​简介本文介绍Spring注册Bean的方法:@Import+ImportBeanDefinitionRegistrar。注册Bean的方法我写了一个系列,见:​​Spring注册Bean(提供Bean)系列--方法大全_IT利刃出......
  • Spring Boot + MyBatis-Plus 实现 MySQL 主从复制动态数据源切换
    MySQL主从复制是一种常见的数据库架构,它可以提高数据库的性能和可用性。动态数据源切换则可以根据业务需求,在不同场景下使用不同的数据源,比如在读多写少的场景下,可以通过切换到从库来分担主库的压力。在本文中,我们将介绍如何在SpringBoot中实现MySQL动态数据源切换,使用My......
  • 配置springcloud 网关gateway 转发websocket请求
    网关是整个项目的统一入口这是直接访问消息服务的请求路径端口号是20007WebSocketService.init("ws://127.0.0.1:20007/ws/"+用户id)显然这样是不符合微服务的方案,所有请求必须经过网关处理,转发到各个服务之中所以我们需要在网关中的yml或者nacos中添加以下配置spring:......
  • IDEA 2024.1:Spring支持增强、GitHub Action支持增强、更新HTTP Client等
    有段时间没有更新IDEA了,早上看到IntelliJIDEA2024.1EAP5发布的邮件提示,瞄了一眼,发现真的是越来越强了,其中不少功能对我来说还是非常有用的。也许这些能力对关注DD的小伙伴也有帮助,所以搞篇博客介绍和推荐一下。Spring、Quarkus等主流框架的支持增强SearchEverywhere功能......