首页
学习
活动
专区
工具
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事务传播机制

总结 上面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 管理器无法感知异常,导致事务失效

10510

聊聊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回来事务

18420
  • 聊聊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回来事务

    24630

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

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

    33610

    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.7K10

    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 测试服务去写测试代码.

    62810

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

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

    55220

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

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

    14810

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

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

    90510

    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 :以非事务方式运行,如果当前存在事务,则把当前事务挂起。

    39020

    记录一次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

    56821

    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默认隔离级别,使用数据库默认事务隔离级别。

    33420

    Spring事务失效场景

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

    40220

    Spring事务传播行为

    由于在我们日常开发时,通常会在一个Service接口中调用其它Service中接口以此来完成一个完整事务操作,这时就会发生服务接口嵌套调用情况,spring通过事务传播行为控制当前事务如何传播到被嵌套调用目标服务接口方法中...下面我们想想了解一下在spring中都有哪些不同事务传播行为,以前它们区别。...spring在TransactionDefinition接口中定义了7种类型事务传播行为,它们具体区别如下: 事务传播行为说明 PROPAGATION_REQUIRED:如果当前没有事务,那就新建一个新事务...,如果已经存在一个事务,那就加入这个事务中。...在spring中声明式事务管理是通过spring AOP功能实现。具体流程是通过事务声明信息,spring负责将事务管理增强逻辑动态织入业务方法相应连接点中。

    1.2K40
    领券