首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring为@transactional提供的传播行为

是指在一个事务方法调用另一个事务方法时,如何处理事务的传播行为。传播行为定义了事务方法与现有事务之间的关系,以及如何处理嵌套事务。

Spring提供了以下几种传播行为:

  1. REQUIRED(默认):如果当前存在事务,则加入该事务,如果不存在事务,则创建一个新事务。这是最常用的传播行为,适用于大多数情况。
  2. SUPPORTS:如果当前存在事务,则加入该事务,如果不存在事务,则以非事务方式执行。适用于不需要事务支持的方法。
  3. MANDATORY:如果当前存在事务,则加入该事务,如果不存在事务,则抛出异常。适用于必须在事务中执行的方法。
  4. REQUIRES_NEW:无论当前是否存在事务,都创建一个新的事务。如果当前存在事务,则将其挂起。适用于需要独立事务执行的方法。
  5. NOT_SUPPORTED:以非事务方式执行方法,如果当前存在事务,则将其挂起。适用于不需要事务支持的方法。
  6. NEVER:以非事务方式执行方法,如果当前存在事务,则抛出异常。适用于不能在事务中执行的方法。
  7. NESTED:如果当前存在事务,则在嵌套事务中执行。如果不存在事务,则创建一个新事务。嵌套事务是独立于外部事务的内部事务,可以独立提交或回滚。适用于需要嵌套事务支持的方法。

每种传播行为都有其适用的场景和优势,开发人员可以根据具体需求选择合适的传播行为。

腾讯云提供了一系列与Spring事务管理相关的产品和服务,例如云数据库MySQL、云数据库TDSQL、云数据库Redis等,这些产品可以与Spring框架无缝集成,提供高可用、高性能的数据库服务。具体产品介绍和链接地址如下:

  1. 云数据库MySQL:提供稳定可靠的MySQL数据库服务,支持主从复制、读写分离、自动备份等功能。了解更多:https://cloud.tencent.com/product/cdb
  2. 云数据库TDSQL:基于TDSQL引擎的分布式数据库服务,具备高可用、高性能、弹性扩展等特点。了解更多:https://cloud.tencent.com/product/tdsql
  3. 云数据库Redis:提供高性能的内存数据库服务,支持主从复制、读写分离、持久化等功能。了解更多:https://cloud.tencent.com/product/redis

通过使用腾讯云的数据库产品,开发人员可以轻松实现Spring事务管理的需求,并获得可靠的数据存储和访问能力。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Transactional事务传播行为

事务传播行为有7种,不是与数据库交互,数据库定义,而是spring框架自带。 本文主要介绍三种:required、nested、required_new。...Propagation_required(传播要求):默认,最常见,如果当前没有事务,就新建事务执行,若有事务,就加入当前事务执行。...外围方法未开启事务情况下,内部两个事务开启此事务是互不干扰,且不受外围异常影响。 默认传播要求下,内围事务里面若异常捕获到,则此内围事务里其他程序正常运行。...Propagation_nested(传播嵌套):如果当前存在事务,则在嵌套内执行,如果没有事务,则执行Propagation_required操作。...1、propagaration_requeire_new与Propagation_nested嵌套传播区别: Nested若外围事务开启,因为是父子嵌套事务,则子事务都随外围主事务回滚而回滚,子事务滚回则所有事务一起回滚

46430
  • Spring事务传播行为

    事务传播特性 事务传播特性就是当一个事务方法被另一个事务方法调用时候,这个事务方法应该如何执行。...以 Java 例,Java Spring 框架中,使用注解方式来使用事务非常简洁方便: @Service public class PersonServive { @Transactional...,其中方法 A 开启是 PROPAGATION_REQUIRED ,方法 B 开启是 PROPAGATION_REQUIRES_NEW ,这种传播机制下,就是方法 B 有自己事务,出错就回滚,没出错就提交...Spring七种事务传播机制 1. 不需要事务 PROPAGATION_NEVER : 没有就非事务执行,有就抛异常。...Spring 默认是这种类型。 PROPAGATION_NESTED : 如果没有事务,就新建一个事务,如果原来有,就在当前事务中嵌套其他事务。

    1K20

    Spring事务传播行为

    先举一个Spring嵌套例子 ServiceA {     void methodA() {         ServiceB.methodB();     } } ServiceB {     ...void methodB(); } 事务传播属性可以在 @Transactional 注解 propagation 属性中定义 比如:         @Transactional(propagation...=Propagation .PROPAGATION_REQUIRED) 七种事务传播行为: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。...详解 PROPAGATION_REQUIRED 假如当前正要执行事务不在另外一个事务里,那么就起一个新事务 比如说,ServiceB.methodB事务级别定义PROPAGATION_REQUIRED...他与 PROPAGATION_REQUIRES_NEW区别是,PROPAGATION_REQUIRES_NEW另起一个事务,将会与他父事务相互独 立,而Nested事务和他父事务是相依,他提交是要等和他父事务一块提交

    836100

    Spring @Transactional 事务7大传播特性

    今天有时间, 重新回顾了一下Spring7大传播特性, 并且我画了图,便于李姐, 自我感觉还不错, 底部还有对领导吐槽, 下次面试问我对加班看法, 可以回复 mandatory, NEVER 哈哈哈...required 默认 使用当前事务, 如果当前没有事务,则自己新建一个事务,子方法是必须运行在一个事务中, 如果当前存在事务,则加入当前事务, 成为一个整体 样例: supports 如果当前有事务..., 则使用事务, 如果当前没有事务, 则不使用事务 mandatory 外部必须存在事务, 不存在就抛异常 required_new 如果当前有事务, 则挂起当前事务, 并创建一个自己新事务, 如果当前没有事务...如果当前有事务, 则把当前事务挂起, 自己不使用事务执行, never 如果当前有事务, 直接抛出异常 nested 如果当期有事务, 则开启一个子事务(嵌套事务), 嵌套事务是独立提交或者独立回滚,...如果当前没有事务, 则同Required 汇总 传播特性 通俗易懂 required 领导没钱, 我有钱, 我自己吃饭, 领导有钱, 领导给我买饭 supports 领导有钱, 我俩一起吃饭, 领导没钱

    47730

    Spring 事务传播行为

    传播行为定义关于客户端和被调用方法事务边界。Spring定义了7种截然不同传播行为。 1. PROPAGATION_MANDATORY,表示该方法必须运行在一个事务中。...被嵌套事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,则行为就像PROPAGATION_REQUIRED一样。 3....否则的话,就会开始一个新事务。 6. PROPAGATION_REQUIRES_NEW,表示当前方法必须在它自己事务里运行。...七种事务理解 第一种事务 :mandatory 表示强制,即方法必须在一个事务中运行,否则,抛出异常。它要求必须处在一个封装事务里,且它自己不会开启新事务。...第二种事务 :nested 嵌套,它要求当前已经有一个封装事务了,且它自己会作为一个内部嵌套事务来运行。如果当前没有封装事务,则它就不管外界了,自己启动一个事务来运行。

    32020

    Spring中事务传播行为

    由于在我们日常开发时,通常会在一个Service接口中调用其它Service中接口以此来完成一个完整事务操作,这时就会发生服务接口嵌套调用情况,spring通过事务传播行为控制当前事务如何传播到被嵌套调用目标服务接口方法中...下面我们想想了解一下在spring中都有哪些不同事务传播行为,以前它们区别。...spring在TransactionDefinition接口中定义了7种类型事务传播行为,它们具体区别如下: 事务传播行为说明 PROPAGATION_REQUIRED:如果当前没有事务,那就新建一个新事务...虽然我们不会直接采用编码方法进行事务管理,但在spring中还是提供了对该方法支持。...我们可以直接使用spring我们提供TransactionTemplate模板类来执行我们用编码方式对事务进行管理。下面我们简单了解一下TransactionTemplate模板类主要方法。

    1.2K40

    Spring之事务传播行为

    一、概念 首先简单了解一下Spring中事务传播行为是什么?听起来很高端,但是真正用起来时候,稍有不慎,就会让自己陷入困境之中,所以在使用之前,我们必须要十分耐心认真的学习它。...从名字理解起来,事务传播行为,既然传播就肯定发生在两个实体之间,否则单个实体又如何发生行为呢。通俗点讲就是“一个巴掌拍不响”。下面进入正规话题。...事务传播行为主要用来描述由某一个事务传播行为修饰方法被嵌套进另一个方法事务中,该事务如何传播。这个概述可能不好理解,换句话就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。...,还是自己开启一个新事务运行,这就是由methodB事务传播行为决定。...二、Spring中七种事务传播行为 通过上面伪代码加文字解释了解到事务传播行为相关概念,下面就要学习事务传播行为类型和运行机制。

    49430

    spring之事务传播行为(三)

    (1)当事务被另一个事务方法调用时,必须指定事务应该如何传播。例如:方法可能继续在现有事务中运行,也可能开启一个新事物,并在自己事务中运行。...(2)事务传播行为可以由传播属性指定,spring定义了7种传播行为,最常用是REQUIRED和REQUIRED_NEW。 在上一节我们利用事务解决了购买时候问题,本节继续介绍事务传播行为。...却发现一本也没有买成功,这就是事务默认传播行为,即在现有的事务内继续运行,也就是purcase方法上注解实际默认是@Transactional(propagation=Propagation.REQUIRED...也就是说,purchase方法加上了@Transactional(propagation=Propagation.REQUIRES_NEW)之后,purchase会在自己事务中运行,并且在运行完之后...我们purchase上加上@Transactional(propagation=Propagation.REQUIRES_NEW)注解,再看下结果: ? ? 可以成功买到一本。

    39040

    Spring事物传播行为案例分析

    Spring事物传播行为案例分析 网上关于Spring事物传播性以及隔离型文章漫天盖地,还有不负责任直接复制名词意思,文章虽然很多却是看云里雾里,我们今天将给出案例分别和大家一起学习。...三、案例解析事务传播7大行为 1、无事务,这个时候id 16第一次插入成功,第二次插入时候失败,库中留存第一次数据 ?...事务传播行为required  结果是因为主键冲突将事务进行了回滚,所以两条数据都没有插入进去。...事务传播行为supports  因为调用方未用事务那么就在非事务中运行,所以插入了first第一条数据。...事务传播行为manatory  因为调用外层没有事务,所以两条数据没有插入。大家想想下面这种写法会发生什么现象事务传播行为mandatory ?

    56510

    Spring事务传播行为案例分析

    1、spring给出经常面试考点Spring事务4个特性含义---这个很容易理解 2、spring事务传播特性定义以及案例分析  一、事务特性ACID 这四个英文单词拼写我一直记不住,求记忆方法...[1596528689192033502.png] 三、案例解析事务传播7大行为 1、无事务,这个时候id 16第一次插入成功,第二次插入时候失败,库中留存第一次数据 [ qqq] 无事务运行...2、propagation_required,默认事务传播行为required,在进行实验2时候将表中id16数据先删除以免影响接下来测试。...3、propagation_supports,如果当前程序存在事务就加入该事务运行,如果不存在事务则在非事务中运行 [qqq] 事务传播行为supports 因为调用方未用事务那么就在非事务中运行...[qqq] 事务传播行为manatory 因为调用外层没有事务,所以两条数据没有插入。

    97710

    Spring事务传播行为有哪些?

    1位工作2年小伙伴面试时候被问到这样一个问题,说,Spring事务传播行为有哪些?他说他在面试时候能想起来一些,但在实际项目开发中又基本不需要配置。...所以,在面试时候回答不全,最后被拒了,觉得有些遗憾。 今天,我给大家分享一下,我对Spring传播行为理解。...1、事务传播行为 ENTER TITLE 在日常开发中,我们经常会存在多个声明了事务方法相互调用,在这种情况下,会存在嵌套两个或两个以上事务情况,所谓事务传播行为就是指这些事务之间传播规则。...就取决于事务传播行为规则定义。 2、事务嵌套 ENTER TITLE 事务嵌套是指两个或两个以上开启事务方法嵌套调用,在这种情况下,需要制定这些事务之间传播行为规则。...在Spring中,一共定义了7种内置事务嵌套传播行为: 第1种:REQUIRED,它是Spring默认事务传播行为。表示如果当前存在事务,则加入这个事务,如果不存在事务,就新建一个事务。

    63910

    Spring 事务隔离级别及传播行为

    : 最低隔离级别,允许读取尚未提交数据变更,可能会导致脏读、幻读或不可重复读 TransactionDefinition.ISOLATION_READ_COMMITTED: 允许读取并发事务已经提交数据...,可以阻止脏读和不可重复读,但幻读仍有可能发生 TransactionDefinition.ISOLATION_SERIALIZABLE: 最高隔离级别,完全服从 ACID 隔离级别。...但是这将严重影响程序性能。通常情况下也不会用到该级别。...传播行为 支持当前事务情况: TransactionDefinition.PROPAGATION_REQUIRED: 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新事务。...(mandatory:强制性) 不支持当前事务情况: TransactionDefinition.PROPAGATION_REQUIRES_NEW: 创建一个新事务,如果当前存在事务,则把当前事务挂起

    44720

    Spring之事务传播行为实操篇

    Spring之事务传播行为 枚举 public enum Propagation { REQUIRED(0), SUPPORTS(1), MANDATORY(2), REQUIRES_NEW...,于是将自己加入到已经存在事务里面 头晕了吧 @Transactional public void xxxBalance() { PropagationTest propagationTest...(事务并没有提交或者回滚),addBalance新开了一个事务,但是更新是同一行数据,导致addBalance事务拿不到锁....,addBalance以非事务方式运行,+100后报错,错误传递到xxxBalance,因为xxxBalance是以事务方式运行,故xxxBalance回退 NEVER 不使用事务,如果当前事务存在...(开启一个事务) 谁抛出异常谁回滚,如果不try addBalance异常会传到xxxBalance导致xxxBalance也回滚 @Transactional public void xxxBalance

    11510

    浅谈Spring事务隔离级别与传播行为

    浅谈Spring事务隔离级别与传播性 这篇文章以一个问题开始,如果你知道答案的话就可以跳过不看啦@(o・ェ・)@ Q:在一个批量任务执行过程中,调用多个子任务时,如果有一些子任务发生异常,只是回滚那些出现异常任务...在Spring中,当一个方法调用另外一个方法时,可以让事务采取不同策略工作,如新建事务或者挂起当前事务等,这便是事务传播行为。...定义 在Spring事务机制中对数据库存在7种传播行为,通过枚举类Propagation定义。...public enum Propagation { /** * 需要事务,默认传播行为。...NESTED传播行为会沿用当前事务隔离级别和锁等特性,而REQUIRES_NEW则可以拥有自己独立隔离级别和锁等特性。

    92050

    面试官:Spring事务传播行为有几种?

    Spring中使用事务 Spring事务支持两种方式,编程式事务和声明式事务,下面的例子使用声明式事务,即@Transactional注解方式 @Transactional注解应用到public方法...互为别名) String 当在配置文件中有多个PlatformTransactionManager ,用该属性指定选择哪个事务管理器 空字符串"" propagation 枚举:Propagation 事务传播行为...如果超过该时间限制但事务还没有完成,则自动回滚事务 -1 readOnly boolean 指定事务是否只读事务 false rollbackFor Class[] 需要回滚异常 空数组{} rollbackForClassName...空数组{} @Transactional其他属性都比较容易理解,详细分析一下事务传播行为 Spring事务传播行为 Spring事务传播行为在Propagation枚举类中定义了如下几种选择...Transactional注解来演示spring事务传播行为 REQUIRED 如果当前存在事务,则加入该事务。

    86010
    领券