Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:
PROPAGATION_REQUIRED
如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY
使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
在使用过程中需要注意以下几点:
1)NESTED和NEW的区别
PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED是容易混淆的两个传播行为。PROPAGATION_REQUIRES_NEW 启动一个新的、和外层事务无关的“内部”事务。该事务拥有自己的独立隔离级别和锁,不依赖于外部事务,独立地提交和回滚。当内部事务开始执行时,外部事务 将被挂起,内务事务结束时,外部事务才继续执行。由此可见, PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED 的最大区别在于:PROPAGATION_REQUIRES_NEW 将创建一个全新的事务,它和外层事务没有任何关系,而 PROPAGATION_NESTED 将创建一个依赖于外层事务的子事务,当外层事务提交或回滚时,子事务也会连带提交和回滚。嵌套事务不能够提交,它必须通过外层事务来完成提交的动作,外层事务的回滚也会造成内部事务的回滚。
2) 当方法被设置为PROPAGATION_NOT_SUPPORTED时,外层业务方法的事务会被挂起,当内部方法运行完成后,外层方法的事务重新运行。如果外层方法没有事务,直接运行,不需要做任何其它的事。
3) 当业务方法被设置为PROPAGATION_NEVER时,它将不能被拥有事务的其它业务方法调用。
4) 当业务方法被设置为PROPAGATION_MANDATORY时,它就不能被非事务的业务方法调用。
分享到:
相关推荐
### Spring中的Transaction事务传播行为种类详解 #### 一、引言 在开发基于Spring框架的应用程序时,事务管理是确保数据一致性的重要手段之一。Spring框架提供了丰富的事务管理功能,其中包括了事务传播行为...
5. 事务传播行为配置错误。比如,在需要REQUIRES_NEW传播行为的情况下配置了REQUIRED。 为了确保事务管理的有效性,开发者应该理解并正确使用@Transactional注解,合理配置事务管理的相关参数,注意异常的处理,并...
在Java应用开发中,特别是使用Spring框架时,开发者可以通过配置不同的事务传播行为来控制事务如何在方法调用之间传播。这些传播行为对于理解并正确实现业务逻辑至关重要。 #### 二、事务传播特性的种类 根据给定...
4. **事务的传播行为**:在编程式事务中,我们需要了解Spring定义的7种事务传播行为,例如PROPAGATION_REQUIRED(默认行为,如果当前存在事务,则加入到该事务;如果当前没有事务,则创建一个新的事务)、...
Spring事务管理是Spring框架中的重要组成部分,用于在多方法调用之间保持数据一致性,确保数据库操作的原子性、一致性、隔离性和持久性。事务管理在Java应用,尤其是企业级应用中至关重要,因为它们通常涉及复杂的...
传播行为:A-->B,在B上声明是否一定需要事务管理 requerd:必须的(默认),如果A有事务那么就加入A的事务,如果A没有事务那么单独创建一个事务 supports,如果A有事务则加入,如果没有就算了 隔离级别 default:...
- Spring事务管理:了解编程式和声明式事务,事务的隔离级别和传播行为。 - SpringBoot和SpringCloud:快速开发特性,微服务架构中的作用。 **SpringMVC框架**: - SpringMVC的工作流程,DispatcherServlet的作用。...
总的来说,分布式事务处理是分布式系统设计中的一大挑战,需要综合考虑异常处理、事务隔离级别、事务传播行为以及各种分布式事务协议。正确理解和应用这些知识,能帮助我们构建更健壮、一致性的分布式系统。
1. Spring事务管理的分类 Spring事务管理可以分为两种情况:编程式事务和声明式事务。其中,声明式事务又包括基于注解@Transactional和tx+aop的方式。 2. 编程式事务管理 编程式事务管理使用TransactionTemplate...
依赖注入...............................................................................................................152.1.4 IoC ..............................................162.1.5 Spring 中的...
- **事务管理**:理解Spring的事务传播行为和事务回滚规则。 这些只是Java面试中可能涉及的部分核心知识点,实际的面试可能会更深入地讨论到这些话题,甚至扩展到其他相关领域,如数据库操作、微服务、分布式系统...
9. **Spring事务传播行为**:定义了事务在遇到嵌套事务时的行为,如`REQUIRED`、`REQUIRES_NEW`等。 10. **Spring设计模式**:使用了大量的设计模式,如工厂模式、代理模式、观察者模式等。 11. **Spring MVC的工作...
系统通过收集、整理和分析用户行为,实现个性化资讯推送,提升信息传播效率。系统设计时需考虑用户界面的友好性和操作的简便性,同时确保数据安全。 【需求分析】 在系统开发初期,需求分析是非常关键的步骤。它...
此外,Spring的AOP功能可以方便地实现日志记录、事务管理等功能,确保系统运行的可靠性和安全性。 其次,Hibernate作为持久层框架,负责处理数据库操作。在远程教育系统中,Hibernate可以方便地映射Java对象到...
在这个新闻系统中,Spring管理所有Bean的生命周期,包括数据库连接、事务管理、业务服务对象等。通过Spring的IoC(Inversion of Control)容器,可以方便地装配和管理组件,实现松耦合。 3. **Hibernate框架**: ...
- Spring:作为基础的依赖注入框架,管理整个应用的bean,提供事务管理等功能。 - SpringMVC:Spring的Web模块,负责处理HTTP请求和响应,提供模型-视图-控制器(MVC)架构模式。 - MyBatis:持久层框架,简化了...
Spring是Java领域的一个轻量级容器,负责管理对象的生命周期和依赖关系,提供AOP(面向切面编程)支持和事务管理。SpringMVC是Spring框架的一部分,专门用于处理Web请求,实现模型-视图-控制器(MVC)设计模式。...