`
wangyan2009
  • 浏览: 25415 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

Spring嵌套事务

 
阅读更多
假设在我们项目中事务控制是放在service层,
一。现在项目中有一个ServiceA中有方法method1和method2,方法method2配置的事务级别为PROPAGATION_REQUIRES_NEW,方法method1不受事务控制
1。当在method1中调用method2时,method2此时也不受事务控制,如:在method2中进行数据插入操作,第一条数据插入成功,第二条数据插入发生异常,此时因为method2不受事务控制,在第一条数据插入成功后,第二条数据插入即使抛出异常,此时第一条数据也不会被回滚.
2.当在method2中调用method1时,则此时method1会受事务控制,如:在method1中进行数据插入操作,插入成功,但此时method2中抛出异常,结果method1成功插入的数据会回滚.

二。现项目中有ServiceA,ServiceB两个Service,在ServiceA中有method1方法,在SerivceB中有method2方法.其中method1不受事务控制,method2受事务控制
1.当在method1中调用ServiceB中的method2方法,在method2方法中执行往数据库中插入两次数据,第一次插入成功,第二次插入发生异常,此时第一次插入成功的数据会发生回滚,由此可见ServiceB中的method2还是受事务控制,而在method1中如果分两次往数据库中插入数据,第一次插入成功,第二次发生异常,此时第一次插入的数据不会回滚,同时也不会影响method2中的插入数据。

2。当在ServiceB中的method2中调用ServiceA中的method1时,method1中执行数据插入成功,而此时method2中操作发生异常,结果会导致method1中数据回滚,由此可知method1共用method2的事务。
分享到:
评论

相关推荐

    springboot多数据源即分布式事务解决方案,添加对多线程的支持

    本教程将深入探讨如何在Spring Boot环境下实现多数据源操作及分布式事务管理,并加入对多线程的支持。 首先,我们来理解多数据源的概念。在大型系统中,往往需要连接多个数据库,如主库、从库、测试库等。Spring ...

    Spring中事务的传播属性详解

    嵌套事务允许独立于外部事务的回滚,但在外部事务回滚时,嵌套事务也会回滚。 #### 五、总结 通过上述分析,我们可以看出Spring中的事务传播行为提供了丰富的选项,可以帮助开发者精确地控制事务的执行逻辑。正确...

    Spring事务管理Demo

    - `NESTED`:如果当前存在事务,则在嵌套事务内运行;如果没有事务,则行为类似于`REQUIRED`。 Spring事务管理的隔离级别包括: - `DEFAULT`:使用数据库的默认隔离级别。 - `READ_UNCOMMITTED`:最低隔离级别,...

    springboot mybatis多数据源加事务嵌套

    springboot mybatis多数据源加事务嵌套 事务之间的调用 回滚 亲测可用 定义2个库分别建立 CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户编号', `user_name` varchar(25) ...

    Spring事务传播机制.docx

    在了解嵌套事务之前,可以先看下单个事务在 Spring 中的处理流程,以便后面可以更清晰地认识嵌套事务的逻辑。Spring 事务使用 AOP 的机制实现,会在@Transactional 注解修饰的方法前后分别织入开启事务的逻辑,以及...

    深入理解spring的事务管理机制

    7. **PROPAGATION_NESTED**:如果当前存在活动事务,则在嵌套事务中运行;如果没有活动事务,则按`PROPAGATION_REQUIRED`执行。这种传播行为仅对`DataSourceTransactionManager`有效。 #### 三、数据库隔离级别 ...

    Spring Nested事务简单案例

    4. **嵌套事务的深度**:理论上,你可以无限嵌套事务,但实际应用中应避免过深的嵌套,因为它可能导致性能问题,并增加代码的复杂性。 5. **事务隔离级别**:Nested事务继承了父事务的隔离级别,所以不需要额外设置...

    spring 事务传播 demo

    7. **PROPAGATION_NESTED**:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则行为类似PROPAGATION_REQUIRED。 在`springTranscationDemo`中,我们可能会看到如何通过设置不同的传播行为来控制事务的...

    Spring事务实践

    Spring事务实践 事务锁 嵌套事务设计原理

    spring 事务基于注解模式

    - NESTED:如果当前存在事务,则在嵌套事务内执行;若无,则按REQUIRED行为处理。 #### 2.3 事务隔离级别 事务隔离级别是指并发事务间如何共享数据。Spring支持五种隔离级别: - READ_UNCOMMITTED:最低级别,可能...

    Spring事务原理、Spring事务配置的五种方式

    PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。 Spring事务管理创造性的解决了很多以前要用重量级的应用服务器才能解决的事务问题,那么...

    spring 事务管理的理解

    这些传播行为可以帮助我们处理嵌套事务和其他复杂的事务场景。 另外,事务的隔离级别也是需要考虑的重要因素。Spring支持四种隔离级别:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE,它们...

    Spring事务传播Demo.zip

    7. **PROPAGATION_NESTED**:如果当前存在事务,则在一个嵌套事务内执行;如果不存在,则行为与PROPAGATION_REQUIRED相同。 在"Spring事务传播Demo"中,我们可能看到如何在不同传播行为下,一个事务方法被另一个...

    Spring事务传播特性解析

    通过代码解析spring传播特性,包括 ... 如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。需要JDBC3.0以上支持。

    springtransaction 事务管理

    如果当前存在事务,则暂停)、NOT_SUPPORTED(总是运行在非事务上下文中,如果当前存在事务,则暂停)、NEVER(如果当前存在事务,则抛出异常)、NESTED(如果当前存在事务,则创建一个嵌套事务;如果不存在,则按照...

    spring 事务传播与隔离级别DEMO

    7. NESTED:如果当前存在事务,则在嵌套事务内执行;如果不存在,则按REQUIRED行为执行。 接下来,我们讨论事务的隔离级别。这是防止并发问题的关键策略,主要有以下四种: 1. READ_UNCOMMITTED:最低级别的隔离,...

    Spring 事务 代码

    NEW(新建事务,如果已存在则挂起)、NOT_SUPPORTED(不支持事务,如果存在则挂起)、NEVER(永不运行在事务中)、NESTED(如果存在事务,则在嵌套事务内运行,否则新建)。 - 超时(timeout):定义事务可以运行的...

    spring几种事务配置详解【精】

    - `NESTED`:如果当前存在事务,则在一个嵌套事务内执行;如果没有事务,则按`REQUIRED`行为执行。 4. **事务的隔离级别** - `READ_UNCOMMITTED`:最低级别,可能导致脏读、不可重复读和幻读。 - `READ_...

    spring事务的传播特性和事务隔离级别

    嵌套事务可以实现细粒度的事务控制,尤其是在需要回滚部分操作而不影响整个事务时。 #### 二、Spring事务的隔离级别(Isolation) 事务的隔离级别定义了事务之间相互隔离的程度,从而影响事务的一致性。Spring支持四...

Global site tag (gtag.js) - Google Analytics