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

从NOT_SUPPORTED到REQUIRES_NEW的Spring事务传播

是指在Spring框架中,事务传播(Transaction Propagation)是指一个方法调用另一个方法时,如何处理事务的传播行为。

在Spring框架中,事务传播行为有不同的选项,其中包括从NOT_SUPPORTED到REQUIRES_NEW。下面是对这些选项的解释:

  1. NOT_SUPPORTED(不支持事务):当一个方法被标记为NOT_SUPPORTED事务传播行为时,它将在没有事务的上下文中执行。如果当前存在一个事务,它将被暂停,并在方法执行期间不会被传播到被调用的方法。
  2. REQUIRES_NEW(新的事务):当一个方法被标记为REQUIRES_NEW事务传播行为时,它将创建一个新的事务,并在方法执行期间挂起当前的事务。如果当前存在一个事务,它将被挂起,并在方法执行完毕后恢复。

这两种事务传播行为在不同的场景下有不同的应用。

NOT_SUPPORTED适用于以下情况:

  • 当方法不需要使用事务,并且希望在没有事务的上下文中执行时,可以使用NOT_SUPPORTED。
  • 当方法需要与其他非事务性操作(如查询)一起执行时,可以使用NOT_SUPPORTED。

REQUIRES_NEW适用于以下情况:

  • 当方法需要在新的事务中执行,并且希望与外部事务无关时,可以使用REQUIRES_NEW。
  • 当方法需要独立于外部事务,避免与外部事务发生冲突时,可以使用REQUIRES_NEW。

对于Spring框架中的事务传播行为,可以使用@Transactional注解来指定。例如,使用@Transactional(propagation = Propagation.NOT_SUPPORTED)可以将方法的事务传播行为设置为NOT_SUPPORTED。

腾讯云提供了一系列与云计算相关的产品,包括云服务器、云数据库、云存储等。这些产品可以帮助开发者快速搭建和管理云计算环境。具体推荐的产品和产品介绍链接地址可以参考腾讯云官方网站。

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

相关·内容

聊聊spring事务REQUIRES_NEW

序本文主要研究一下spring事务REQUIRES_NEWTransactionDefinitionorg/springframework/transaction/TransactionDefinition.java...thread [" +Thread.currentThread().getName() + "]");}return value;}unbindResource主要是执行doUnbindResource,resources...,会判断是否有suspendedResources,如果有则执行resume,恢复之前suspend事务resumeorg/springframework/transaction/support/AbstractPlatformTransactionManager.java...事务REQUIRES_NEW传播级别的实现就是对当前事务进行suspend,底层是unbind,然后创建新事务,执行完毕判断是否有suspend事务,有则执行resume,底层是bind。...具体对于mysql来讲,它不感知这些嵌套事务,它先接收到是内嵌事务sql,然后提交,最后接收到了外层resume回来事务

19420

Spring事务传播机制

总结 上面7种事务传播类型,日常用到基本上就REQUIRED、REQUIRES_NEWNOT_SUPPORTED这几种。...父方法开启REQUIRED事务,子方法开启NOT_SUPPORTED事务 父方法开启Spring默认事务传播类型,子方法开启NOT_SUPPORTED事务 设置insertRoleMenu 内部发生异常...父方法开启REQUIRED事务,子方法开启REQUIRES_NEW事务 父方法开启Spring默认事务传播类型,子方法开启Spring REQUIRES_NEW事务传播类型,与上一种不同是,异常产生发生在父方法最后一行...父方法开启REQUIRED事务,子方法开启REQUIRES_NEW事务 父方法开启Spring默认事务传播类型,子方法开启Spring REQUIRES_NEW事务传播类型,异常产生发生在父方法最后一行...同一个类中方法调用 同一个类中父方法调用子方法,都开启了事务,如图 子方法事务会失效 不正确异常捕获 如果发生异常代码被try catch捕获,则Spring 管理器无法感知异常,导致事务失效

11210
  • 聊聊spring事务REQUIRES_NEW

    序 本文主要研究一下spring事务REQUIRES_NEW TransactionDefinition org/springframework/transaction/TransactionDefinition.java...Thread.currentThread().getName() + "]"); } return value; } unbindResource主要是执行doUnbindResource,resources...,会判断是否有suspendedResources,如果有则执行resume,恢复之前suspend事务 resume org/springframework/transaction/support/...事务REQUIRES_NEW传播级别的实现就是对当前事务进行suspend,底层是unbind,然后创建新事务,执行完毕判断是否有suspend事务,有则执行resume,底层是bind。...具体对于mysql来讲,它不感知这些嵌套事务,它先接收到是内嵌事务sql,然后提交,最后接收到了外层resume回来事务

    25930

    Spring事务传播机制及底层原理解析

    REQUIRES_NEW (需要新): 总是创建一个新事务,如果当前存在事务,则把当前事务挂起,新事务结束后,再恢复之前被挂起事务。 5....Spring事务传播机制底层原理涉及Spring AOP(面向切面编程)和事务管理器协同工作。...事务决策: - 根据`@Transactional`注解声明事务传播属性,代理对象决定如何处理事务: - 创建新事务(如`REQUIRES_NEW`) - 加入现有事务(如...`REQUIRED`、`SUPPORTS`、`MANDATORY`) - 挂起现有事务(如`REQUIRES_NEW`、`NOT_SUPPORTED`) - 抛出异常(如`NEVER...通过上述机制,Spring能够在方法调用前后透明地处理事务开始、结束、回滚以及传播行为,使得开发者能够更加关注业务逻辑实现,而不是底层事务管理细节。

    54010

    18个示例详解 Spring 事务传播机制

    传播属性 Propagation 枚举 Spring事务传播机制在 Propagation 枚举中定义了7个分类: REQUIRED 默认 SUPPORTS 支持 MANDATORY 强制 REQUIRES_NEW...新建 NOT_SUPPORTED 不支持 NEVER 从不 NESTED 嵌套 事务传播机制,是 spring 规定。...示例9:在示例8中,如果不想让 REQUIRES_NEW 传播属性影响被调用事务,将异常捕获就不会影响被调用事务。...强制调用方添加事务,如果不存在事务就报错,存在事务就加入该事务 REQUIRES_NEW 无论调用方是否存在事务,都会创建新事务,并且调用方异常不会影响 REQUIRES_NEW事务 NOT_SUPPORTED...,直接回滚 测试源码 传播属性源码 参考 带你读懂Spring 事务——事务传播机制

    1.9K10

    Spring事务传播行为

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

    1K20

    Transactional事物注解(十一)

    propagation() default Propagation.REQUIRED; Propagation 就是支持事物传播类型了,定义了 7 个枚举,下面分别来讲解 REQUIRED 支持当前事务...MANDATORY 支持当前事务,如果不存在则抛出异常 REQUIRES_NEW 创建一个新事务,并暂停当前事务(如果存在) // REQUIRED parent { s1(); // REQUIRED...如果没有事物,则同 REQUIRED ○ 父事务有异常,不影响子 NOT_SUPPORTED 以非事务方式执行,如果存在当前事务,则挂起当前事务,挂起意思和上面 暂停事物 类似 // REQUIRED...,则子事物会一起回滚,相反,子事物异常,则父事务可以选择回滚还是提交 以上事物传播类型含义,在源码中有写,翻译成中文就是如上所示含义。...其他事物表现都差不多。 事物传播测试 如果要测试事物传播类型的话,可以使用 Junit 来测试,当然是要在之前 stu 测试服务去写测试代码.

    63110

    事务传播行为 隔离级别 异常回滚策略

    事务传播行为 事务传播行为;propagation:当前方法事务[是否要和别人公用一个事务]如何传播下去(里面的方法如果用事务,是否和他公用一个事务) Propagation propagation...NOT_SUPPORTED:不支持用车。...A,B,D都成,C自己回滚 总结: 对这段代码而言 传播行为过程中,只要Requires_new被执行过就一定成功,不管后面出不出问题。异常机制还是一样,出现异常代码以后不执行。...Required只要感觉异常就一定回滚。和外事务是什么传播行为无关。 传播行为总是来定义,当一个事务存在时候,他内部事务该怎么执行。...spring事务是aop动态代理做 我们想用事务 必须获取代理对象来调用方法 通过 对象.方法()才能加上事务

    55620

    面试官:说说Spring事务传播行为

    前言 在开发中,相信大家都使用过Spring事务管理功能。那么,你是否有了解过,Spring事务传播行为呢? Spring中,有7种类型事务传播行为。...事务传播行为是Spring框架提供一种事务管理方式,它不是数据库提供。不知道大家是否听说过“不要在service事务方法中嵌套事务方法,这样会提交多个事务说法,其实这是不准确。...了解了事务传播行为之后,相信你就会明白! Spring中七种事务传播行为 事务传播行为,默认值为 Propagation.REQUIRED。...以非事务方式运行,如果当前存在事务,暂停当前事务。这种方式与REQUIRES_NEW有所类似,但是NOT_SUPPORTED修饰方法其本身是没有事务。这里就不做代码演示了。...所以这里就不做演示了 总结 事务传播行为,在开发中可能不会特别的留意它(更多时候,我们可能只是使用默认方式),但是还是需要对其要有所理解。希望本篇文章能让大家明白Spring7种事务传播行为。

    15810

    面试官:说说Spring事务传播行为

    前言 在开发中,相信大家都使用过Spring事务管理功能。那么,你是否有了解过,Spring事务传播行为呢? Spring中,有7种类型事务传播行为。...事务传播行为是Spring框架提供一种事务管理方式,它不是数据库提供。不知道大家是否听说过“不要在service事务方法中嵌套事务方法,这样会提交多个事务说法,其实这是不准确。...Spring中七种事务传播行为 事务传播行为,默认值为 Propagation.REQUIRED。...复制代码 以非事务方式运行,如果当前存在事务,暂停当前事务。这种方式与REQUIRES_NEW有所类似,但是NOT_SUPPORTED修饰方法其本身是没有事务。这里就不做代码演示了。...所以这里就不做演示了 总结 事务传播行为,在开发中可能不会特别的留意它(更多时候,我们可能只是使用默认方式),但是还是需要对其要有所理解。希望本篇文章能让大家明白Spring7种事务传播行为。

    91310

    记录一次mybatis缓存和事务传播行为导致ut挂排查过程

    ,这两个传播行为区别在于: REQUIRED:默认spring事务传播级别,使用该级别的特点是,如果上下文中已经存在事务,那么就加入事务中执行,如果当前上下文中不存在事务,则新建事务执行。...REQUIRED_NEW:字面即可知道,new,每次都要一个新事务,该传播级别的特点是,每次都会新建一个事务,并且同时将上下文中事务挂起,执行当前新建事务完成以后,上下文事务恢复再执行。...REQUIRES_NEW方法改为默认REQUIRED,发现能查询platformUser 在ut中使用其他方法查询插入platformUser,发现能查询 mybatis配置加上日志,debug...红框中就是最外层事务开启老session,绿色框是中间REQUIRES_NEW事务中开启新Session。...参考: 了解事务陷阱:https://www.ibm.com/developerworks/cn/java/j-ts1.html Spring五个事务隔离级别和七个事务传播行为:https://blog.csdn.net

    57321

    Spring 事务传播类型、事务隔离级别

    事务传播类型 spring 7种事务传播类型 PROPAGATION_REQUIRED: 如果当前没有事务,则创建一个新事务;如果当前存在事务,就加入该事务;该配置是最常用设置。...; } } 结果:只会是 user 插入成功, 因为 addUser方法使用了事务传播行为:Propagation.REQUIRES_NEW,当前存在事务1,则新建了一个自己事务,并挂起了事务...如果以上例子改为在一个方法中调用另一个事务方法,另一个方法传播行为会失效: @Service("studentImpl") public class StudentImpl implements Student...; } } 结果:addUser 事务传播性会失效,事务1回滚后,数据库不会插入任何记录。...spring 5种隔离级别 ISOLATION_DEFAULT: 这是一个PlatfromTransactionManager默认隔离级别,使用数据库默认事务隔离级别。

    34420

    Spring Boot 事物快速应用

    需要指定不同事务管理时候(多数据源配置详见: 《Spring Boot多数据源配置与使用》),只需要通过value属性配置事务管理器名即可@Transactional(value="transactionalManagerPrimary...") 除了指定不同事务管理器之后,还能对事务进行隔离级别和传播行为控制,下面分别详细解释: 隔离级别 隔离级别是指若干个并发事务之间隔离程度,与我们开发时候主要相关场景包括:脏读取、重复读、幻读...指定方法:通过使用 isolation 属性设置,例如:@Transactional(isolation = Isolation.DEFAULT) 传播行为 所谓事务传播行为是指,如果在开始当前事务之前...{ REQUIRED(0), SUPPORTS(1), MANDATORY(2), REQUIRES_NEW(3), NOT_SUPPORTED(4),...REQUIRES_NEW :创建一个新事务,如果当前存在事务,则把当前事务挂起。 NOT_SUPPORTED :以非事务方式运行,如果当前存在事务,则把当前事务挂起。

    39220

    Spring事务失效场景

    错误使用传播机制Spring事务传播机制是指在多个事务方法相互调用时,确定事务应该如何传播策略。...Spring提供了七种事务传播机制:REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEWNOT_SUPPORTED、NEVER、NESTED。...REQUIRES_NEW传播机制REQUIRES_NEW原理是如果当前方法中没有事务,就会创建一个新事务。...事务传播机制说明如下:REQUIRED 如果当前上下文中存在事务,那么加入该事务,如果不存在事务,创建一个事务,这是默认传播属性值。...NOT_SUPPORTED 如果当前上下文中存在事务,则挂起当前事务,然后新方法在没有事务环境中执行。NEVER 如果当前上下文中存在事务,则抛出异常,否则在无事务环境上执行代码。

    40820

    Spring事务传播属性和隔离级别

    Spring事务传播属性和隔离级别 一、Spring事务传播属性(Propagation): 0) 事务四个关键属性(ACID) 1) REQUIRED(默认属性)需要事务 2) MANDATORY...支持事务 3) NEVER 不能有事务 4) NOT_SUPPORTED 不支持事务 5) REQUIRES_NEW 每次开启新事务 6) SUPPORTS 支持事务 7) NESTED 嵌套事务 二...如果外层没有事务 不会开启新事务 如果外层存在事务,则融入当前事务 REQUIRES_NEW: 每次开启新事务 如果外层存在事务,外层事务挂起,自己开启新事务执行,执行完成,恢复外层事务继续执行...事务传播属性(Propagation): 0) 事务四个关键属性(ACID) 原子性:事务是一个原子操作,由一系列动作组成。...4) NOT_SUPPORTED 不支持事务 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

    17110
    领券