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

Spring上的嵌套事务

在Spring框架中,嵌套事务是指在一个事务内部,调用另一个事务的方法。Spring框架支持嵌套事务,并且可以通过事务管理器来配置嵌套事务的行为。

在Spring框架中,嵌套事务的实现主要依赖于事务管理器的配置。Spring框架提供了两种事务管理器:DataSourceTransactionManager和JpaTransactionManager。这两种事务管理器都支持嵌套事务,但是它们的实现方式略有不同。

DataSourceTransactionManager是基于JDBC的事务管理器,它支持嵌套事务,但是需要配置事务传播行为。事务传播行为是指当一个事务内部调用另一个事务时,如何处理这两个事务的关系。Spring框架提供了多种事务传播行为,例如PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW、PROPAGATION_NESTED等。

JpaTransactionManager是基于JPA的事务管理器,它也支持嵌套事务,并且也需要配置事务传播行为。JpaTransactionManager的事务传播行为与DataSourceTransactionManager类似,但是它的实现方式略有不同。

总之,Spring框架支持嵌套事务,并且可以通过事务管理器来配置嵌套事务的行为。不同的事务管理器可能有不同的实现方式和配置选项,但是它们的基本原理都是基于数据库的事务机制。

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

相关·内容

Spring事务中嵌套事务的实现和示例

在Spring事务中,嵌套事务是通过事务传播行为和可选的事务管理器来实现的。...嵌套事务是指一个事务中包含了另一个事务,在外层事务的范围内,内层事务可以单独进行提交或回滚,并且外层事务的提交或回滚不会受到内层事务的影响。...以下是一个示例代码,演示了如何使用嵌套事务:@Service@Transactionalpublic class OuterService { @Autowired private InnerService...在执行到innerService.innerMethod()时,会调用内层服务的innerMethod()方法,此时内层事务会在外层事务的范围内开启。...在内层事务的执行过程中,如果发生异常,内层事务会被回滚,但外层事务仍然继续执行。最后,根据外层事务的提交或回滚决定是否将外层事务及其包含的内层事务一起提交或回滚。

73191

(spring)嵌套事务逻辑分析

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。...这是最常见的选择。 PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。...PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。...PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。...嵌套事务逻辑分析 外部事务成功 -> 外部事务成功,子事务可能提交可能回滚 子事务 失败, 回滚到保存点savepoint,需要捕获异常处理,如果不捕获,throw到外部事务,则外部事务不会成功提交

63720
  • Spring嵌套事务是怎么回滚的?

    事务的传播机制 多数据源的切换问题 更深入理解 Spring 事务。 用户注册完成后,需要给该用户登记一门PUA必修课,并更新该门课的登记用户数。 为此,我添加了两个表。...源码解析 伪代码梳理整个事务的结构: 整个业务包含2层事务: 外层 saveUser() 的事务 内层 regCourse() 事务 Spring声明式事务中的propagation属性,表示对这些方法使用怎样的事务...,如下: 检查是否需要创建事务 调用具体的业务方法进行处理 提交事务 处理异常 当前案例是两个事务嵌套,外层事务 saveUser()和内层事务 regCourse(),每个事务都会调用到这个方法。...继续调用 processRollback() 该方法里区分了三种场景: 是否有保存点 是否为一个新的事务 是否处于一个更大的事务中 因为默认传播类型REQUIRED,嵌套的事务并未开启一个新事务,所以属于当前事务处于一个更大事务中...修正 Spring事务默认传播属性 REQUIRED,在整个事务的调用链上,任一环节抛异常都会导致全局回滚。

    1.4K50

    spring事务(上)

    概念 对于事务(Transaction)的概念,网上有各种版本,大同小异, 事务就是是由一系列对系统中数据进行读写的操作组成的一个程序执行单元,狭义上的事务特指数据库事务。...三级加锁协议:在一级加锁协议的基础上,加上这样一条规则——事务T在读取数据R之前必须对它加S锁,直到事务结束方可释放。...Spring事务管理器 Spring事务管理涉及的接口的联系如下: ?...如果这个嵌套事务失败, 我们将回滚到此 savepoint. 潜套事务是外部事务的一部分, 只有外部事务结束后它才会被提交....与PROPAGATIONREQUIRESNEW的区别: RequiresNew每次都创建新的独立的物理事务,而Nested只有一个物理事务; Nested嵌套事务回滚或提交不会导致外部事务回滚或提交,但外部事务回滚将导致嵌套事务回滚

    77930

    java 事务嵌套_Java事务以及嵌套事务

    最近遇到事务的处理,嵌套事务,自己研究,整理一下。 1 先看结论 1、在Java事务中,事务的嵌套,如果有事务成功,那么则都成功,否则都不会成功。...3 预设场景 这里直接测试spring boot 使用spring data jpa添加一个用户进行测试 实体类user @Data @Entity public class User { @Id...结论:并行事务不存在事务影响 4.2 场景:嵌套相同事务 a) 事务嵌套,在同一个事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest...4.3 场景:嵌套不同事务 a)事务嵌套,在不同事务中,没有对异常进行处理 @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest public...结论:不同事务中,嵌套的事务,没有对异常进行处理,都不会执行成功。(其实在外部事务中出错,两个也是都不会插入成功数据。)

    2.9K10

    Spring JDBC-事务方法嵌套调用解读

    Spring事务传播机制回顾 相互嵌套的服务方法 源码 Spring事务传播机制回顾 关于Spring事务的一个错误的说法:一个事务方法中不应该调用另外一个事务方法,否则将产生两个事务,其实这是不正确的...这是因为未正确认识Spring事务传播机制而造成的误解。 Spring对事务控制的支持统一在TransactionDefinition类中描述 ?...事务的过期时间 boolean isReadOnly();事务的读、写特性 String getName();事务的名称 除了事务的传播行为外,事务的其他特性Spring是借助底层资源的功能来完成的,Spring...但是事务的传播行为却是Spring凭借自身的框架提供的功能。 所谓事务传播的行为,就是多个事务方法相互调用时,事务如何在这些方法间传播。...Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播: 事务传播行为类型 说明 PROPAGATION_REQUIRED

    71640

    Spring中,多个service发生嵌套,事务是怎么样的?

    根据报错信息来看是spring框架中的事务管理报错:事务回滚了,因为它被标记为回滚状态。...报错原因 多层嵌套事务中,如果使用了默认的事务传播方式,当内层事务抛出异常,外层事务捕捉并正常执行完毕时,就会报出rollback-only异常。...spring框架是使用AOP的方式来管理事务,如果一个被事务管理的方法正常执行完毕,方法结束时spring会将方法中的sql进行提交。如果方法执行过程中出现异常,则回滚。...在项目中,一般我们都会使用默认的传播方式,这样无论外层事务和内层事务任何一个出现异常,那么所有的sql都不会执行。在嵌套事务场景中,内层事务的sql和外层事务的sql会在外层事务结束时进行提交或回滚。...注:PROPAGATION_NESTED基于数据库savepoint实现的嵌套事务,外层事务的提交和回滚能够控制嵌内层事务,而内层事务报错时,可以返回原始savepoint,外层事务可以继续提交。

    9.8K40

    Spring中,多个service发生嵌套,事务是怎么样的?

    根据报错信息来看是spring框架中的事务管理报错:事务回滚了,因为它被标记为回滚状态。...报错原因 多层嵌套事务中,如果使用了默认的事务传播方式,当内层事务抛出异常,外层事务捕捉并正常执行完毕时,就会报出rollback-only异常。...spring框架是使用AOP的方式来管理事务,如果一个被事务管理的方法正常执行完毕,方法结束时spring会将方法中的sql进行提交。如果方法执行过程中出现异常,则回滚。...在项目中,一般我们都会使用默认的传播方式,这样无论外层事务和内层事务任何一个出现异常,那么所有的sql都不会执行。在嵌套事务场景中,内层事务的sql和外层事务的sql会在外层事务结束时进行提交或回滚。...注:PROPAGATION_NESTED基于数据库savepoint实现的嵌套事务,外层事务的提交和回滚能够控制嵌内层事务,而内层事务报错时,可以返回原始savepoint,外层事务可以继续提交。

    1K10

    spring @Value嵌套使用

    写这篇文章的原因在于博主的一篇文章https://blog.csdn.net/john1337/article/details/104237974,在这篇文章中博主讲述了如何通过配置Swagger的host...来使得swagger页面显示的ip为部署服务的服务器地址,springboot使用下面的配置: @Configuration public class SwaggerConfig { @Value...,这样就会导致swagger页面使用的端口为8080,这样如果本地配置的不是8080端口,上面的host配置就会导致本来能正常工作的swagger不能正常工作了,其实说白了这个问题产生的原因在于端口固定为...8080了,而没有使用系统的server.port配置,找到问题根源了,接下来的问题就转换为端口使用server.port配置了,也就是说如果配置文件中设置了swagger2.host,如果没有配置swagger2....host,那么swagger使用的host的地址就为127.0.0.1:{server.host}的值,这就涉及到@Value注解嵌套使用问题,下面为优化后的swagger配置: @Configuration

    57920

    Spring的事务详解

    事务在Spring中是如何运作的 在了解嵌套事务之前,可以先看下单个事务在Spring中的处理流程,以便后面可以更清晰地认识嵌套事务的逻辑。...Spring事务使用AOP的机制实现,会在@Transactional注解修饰的方法前后分别织入开启事务的逻辑,以及提交或回滚的逻辑。...@Transactional可以修饰在方法或者类上,区别就在于修饰于类上的,会对该类下符合条件的方法(例如private修饰的方法就不符合条件)前后都织入事务的逻辑。...如果客户端有事务就报错 NESTED 如果当前存在事务,则在嵌套事务内执行。...@Transaction失效场景 作用于非public方法上,之所以会失效是因为在Spring AOP 代理时,如下图所示 TransactionInterceptor (事务拦截器)在目标方法执行前后进行拦截

    15540

    Spring事务

    一、Spring事务简介 事务作用:在数据层保障一系列的数据库操作同成功同失败 Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败 实现: 通过PlatformTransactionManager...@Transactional注解开启事务 Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合 注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务...三、Spring事务角色 事务管理员:发起事务方,在Spring中通常指代业务层开启事务的方法 事务协调员:加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法 四、事务相关配置 属性...设置是否为只读事务 boolean readOnly=true 只读事务 timeout 设置事务超时时间 int (秒) time = -1 永不超时 rollbackFor 设置事务回滚的异常类数组...,必须继承自Throwable noRollbackForClassName = {IOException} 五、事务传播行为 事务传播行为:事务协调员对事务管理员所携带事务的处理办法 e.g.

    16021

    Spring事务

    1、什么是事务? 事务是指逻辑上的一组操作,这组操作要么全部成功,要么全部失败。 2、事务的特性 ①原子性:指事务的操作要么全部都发生,要么都不发生。...③隔离性:指多个事务并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离(可以通过设置事务的隔离级别解决,后续会讲到)。...3、Spring事务管理器 Spring事务管理器高层抽象接口主要有3个接口 ①PlatformTransactionManager(平台事务管理器):主要是进行事务的提交回滚等功能。...4、PlatformTransactionManager接口 根据不同的持久化框架提供了不同的PlatformTransactionManager接口实现: ①使用Spring JDBC或iBatis...5.2事务的传播行为(七种) 事务的传播行为主要解决的是业务层方法之间相互调用时产生的事务应该如何进行传递的问题。

    55800

    spring事务

    一、什么是事务 逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。...二、事务的特性(ACID) 原子性:确保动作要么全部完成,要么完全不起作用 一致性:一旦所有事务动作完成,事务就要被提交。...数据保持一致性 隔离性:多个事务会同时处理相同的数据,每个事务都应该隔离开,防止数据损坏 持久性:事务一旦完成,无论系统如何,结果不受影响,事务结果持久化到硬盘中 三、基于xml配置文件方式 的事务,配置事务的传播特性--> 事务方法(增删改)之间互相调用,事务的管理方式 isolation:事务传播行为 timeout:超时时间 ⑴ 事务需要在一定时间内进行提交,如果不提交进行回滚 ⑵ 默认值为-1,不超时

    6800

    Spring事务

    在实际开发中,会经常涉及事务管理问题,为此 Spring 提供了专门用于事务管理的API。Spring 的事务管理简化了传统事务管理的流程,并且在一定程度上减少了开发者的工作量。...Spring 的事务管理分为2种形式: 传统的编程式事务管理:通过编写代码实现的事务管理,包括定义事务的开始、正式执行事务提交和异常时的事务回滚(我们能想到 AOP,这就是把事务代码封装到了 “切面”中...基于XML方式的声明式事务 通过在配置文件中配置事务规则的相关声明来实现。Spring2.0 以后,提供了 tx 命名空间来配置事务, 来配置事务的通知/增强处理。...-- --> 2.在需要使用事务的bean类或者bean类的方法上添加注解 @Transactional 如果将注解添加到类上,则表示事务的设置对整个类的所有方法都起作用...;如果将注解添加在类的某个方法上,则表示事务的设置只对该方法有效。

    66410

    Spring事务专题(四)Spring中事务的使用、抽象机制及模拟Spring事务实现

    Spring事务应用大纲 在看这篇文章,以及下篇源码分析的文章我希望你对Spring AOP以及有充分的了解,不然一些细节问题你可能看不明白,关于Spring AOP如果你能看完这三篇文章基本上就没什么问题了...申明式事务的例子我这里就省去了,我相信没几个人不会用吧..... Spring对事务的抽象 Spring事务抽象的关键就是事务策略的概念,事务策略是通过TransactionManager接口定义的。...也有些是Spring赋予的,例如事务的传播机制。...TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED...Spring中事务的同步机制 Spring中事务相关的同步机制可以分为两类 资源的同步 行为的同步 什么是资源的同步呢?

    98720

    Spring的事务控制

    spring事务控制我们要明确的事 第一:JavaEE 体系进行分层开发,事务处理位于业务层,Spring 提供了分层设计业务层的事务处理解决方案。...第二:spring 框架为我们提供了一组事务控制的接口。具体在后面的第二小节介绍。这组接口是在spring-tx-5.0.2.RELEASE.jar 中。...第三:spring 的事务控制都是基于 AOP 的,它既可以使用编程的方式实现,也可以使用配置的方式实现。我们学习的重点是使用配置的方式实现。...--spring中基于xml的声明式事务控制配置步骤 1.配置事务管理器 2.配置事务通知 此时需要导入事务的约束 tx的名称空间和约束 同时也需要aop...--spring基于注解的声明式事务控制步骤 1.配置事务管理器 2.开启spring对注解事务的支持 3.在需要事务支持的地方使用@Transactional

    32920

    Spring 事务

    Spring 事务 关于理论性的内容,我在之前的一篇文章中介绍过,这里不再过多阐述,这里给出之前文章的链接:Spring 事务管理 什么是事务 是一组逻辑操作,要么执行,要么不执行。...事务的特性 ACID (原子性、一致性、隔离性、持久性) 并发事务带来的问题 脏读 丢失修改 不可重复读 幻读 配置事务管理器 Spring 事务接口 PlatformTransactionManager...,返回当前活动的事务或创建一个新事务 commit:使用事务目前的状态提交事务 rollback:对执行的事务进行回滚 一般情况下用的比较多的就是 commit 提交事务和 rollback 回滚事操作了...其他情况: TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED

    54540

    Spring框架 Spring事务

    Spring框架 - Spring事务 事务操作(事务概念) 1 、什么事务 ( 1 )事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操 作都失败 ( 2 )典型场景:银行转账...使用事务进行解决 ( 2 )事务操作过程 事务操作( Spring 事务管理介绍) 1 、事务添加到 JavaEE 三层结构里面 Service 层(业务逻辑层) 2 、在 Spring 进行事务管理操作...AOP 原理 5 、 Spring 事务管理 API ( 1 )提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类 事务操作(注解声明式事务管理) 1 、在 spring 配置文件配置事务管理器...,这个过程中事务 是如何进行管理的 3 、 ioslation :事务隔离级别 ( 1 )事务有特性成为隔离性,多事务操作之间不会产生影响。...不考虑隔离性产生很多问题 ( 2 )有三个读问题:脏读、不可重复读、虚(幻)读 ( 3 )脏读:一个未提交事务读取到另一个未提交事务的数据 ( 4 )不可重复读:一个未提交事务读取到另一提交事务修改数据

    21130
    领券