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

Spring上的嵌套事务

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

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

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

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

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

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

相关·内容

(spring)嵌套事务逻辑分析

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

60220

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

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

30491

Spring嵌套事务是怎么回滚

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

1.3K50

spring事务()

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

74830

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

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

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

64440

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

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

8.9K30

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

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

96410

spring @Value嵌套使用

写这篇文章原因在于博主一篇文章https://blog.csdn.net/john1337/article/details/104237974,在这篇文章中博主讲述了如何通过配置Swaggerhost...来使得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

52720

Spring事务详解

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

13140

Spring事务

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

60810

Spring事务

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

52200

Spring事务

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

11721

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

30320

Spring 事务

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

51640

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

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

90220

Spring事务

Spring事务 配置事务 spring配置文件 <?xml version="1.0" encoding="UTF-8"?...Spring事务传播特性(propagation 属性) REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。...NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。 NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。...3)这时,客户端B事务还没提交,客户端A不能查询到B已经更新数据,解决了脏读问题; (4)客户端B事务提交; (5)客户端A执行与一步相同查询,结果 与一步不一致,即产生了不可重复读问题...一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录,这样可以防止幻读; 3、事务隔离级别为串行化时,读写数据都会锁住整张表; 4、隔离级别越高,越能保证数据完整性和一致性,但是对并发性能影响也越大

40420

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 )不可重复读:一个未提交事务读取到另一提交事务修改数据

17030
领券