`

事务(三)———Spring事务传播特性(Propagation)

 
阅读更多

 

Propagationkey属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:

 

PROPAGATION_REQUIRED

——支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

比如说,ServiceB.methodB的事务级别定义为PROPAGATION_REQUIRED, 那么由于执行ServiceA.methodA的时候,ServiceA.methodA已经起了事务,这时调用ServiceB.methodBServiceB.methodB看到自己已经运行在ServiceA.methodA的事务内部,就不再起新的事务。而假如ServiceA.methodA运行的时候发现自己没有在事务中,他就会为自己分配一个事务。这样,在ServiceA.methodA或者在ServiceB.methodB内的任何地方出现异常,事务都会被回滚。即使ServiceB.methodB的事务已经被提交,但是ServiceA.methodA在接下来fail要回滚,ServiceB.methodB也要回滚。

 

PROPAGATION_SUPPORTS

支持当前事务,如果当前没有事务,就以非事务方式执行。

 

PROPAGATION_MANDATORY

——支持当前事务,如果当前没有事务,就抛出异常。

即必须在一个事务中运行,否则,他就要抛出异常。

 

PROPAGATION_REQUIRES_NEW

——新建事务,如果当前存在事务,把当前事务挂起。

这个就比较绕口了。  比如我们设计ServiceA.methodA的事务级别为PROPAGATION_REQUIREDServiceB.methodB的事务级别为PROPAGATION_REQUIRES_NEW,那么当执行到ServiceB.methodB的时候,ServiceA.methodA所在的事务就会挂起,ServiceB.methodB会起一个新的事务,等待ServiceB.methodB的事务完成以后,他才继续执行。他与PROPAGATION_REQUIRED 的事务区别在于事务的回滚程度了。因为ServiceB.methodB是新起一个事务,那么就是存在两个不同的事务。如果ServiceB.methodB已经提交,那么ServiceA.methodA失败回滚,ServiceB.methodB是不会回滚的。如果ServiceB.methodB失败回滚,如果他抛出的异常被ServiceA.methodA捕获,ServiceA.methodA事务仍然可能提交。

 

PROPAGATION_NOT_SUPPORTED

——以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

比如ServiceA.methodA的事务级别是PROPAGATION_REQUIRED ,而ServiceB.methodB的事务级别是PROPAGATION_NOT_SUPPORTED,那么当执行到ServiceB.methodB时,ServiceA.methodA的事务挂起,而他以非事务的状态运行完,再继续ServiceA.methodA的事务。

 

PROPAGATION_NEVER

——以非事务方式执行,如果当前存在事务,则抛出异常。

不能在事务中运行。假设ServiceA.methodA的事务级别是PROPAGATION_REQUIRED  ServiceB.methodB的事务级别是PROPAGATION_NEVER,那么ServiceB.methodB就要抛出异常了。

 

PROPAGATION_NESTED

理解Nested的关键是savepoint。他与PROPAGATION_REQUIRES_NEW的区别是,PROPAGATION_REQUIRES_NEW另起一个事务,将会与他的父事务相互独立,而Nested的事务和他的父事务是相依的,他的提交是要等和他的父事务一块提交的。也就是说,如果父事务最后回滚,他也要回滚的。而Nested事务的好处是他有一个savepoint

 

 

分享到:
评论

相关推荐

    Spring3事务管理——使用@Transactional 注解.rar

    - ` propagation`: 事务传播行为,定义了方法调用如何嵌套在事务中。例如,`PROPAGATION_REQUIRED`是最常见的,表示如果没有当前事务,就新建一个。 - ` isolation`: 隔离级别,如`ISOLATION_DEFAULT`、`ISOLATION...

    spring事务与数据库操作

    ### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...

    Spring.NET学习笔记16——事务管理Demo源码

    3. **事务传播行为**:Spring.NET支持七种事务传播行为,如`REQUIRED`(如果当前存在事务,则加入,否则新建)、`SUPPORTS`(如果存在事务则参与,不存在则不开启新事务)、`MANDATORY`(如果存在事务则参与,不存在...

    Spring事务管理配置

    事务传播行为是理解Spring事务管理配置时的一个关键概念。除了`PROPAGATION_REQUIRED`外,Spring还支持其他几种传播行为,包括但不限于: - `PROPAGATION_SUPPORTS`:如果当前存在事务,则支持该事务;如果不存在...

    spring基于AspectJ实现事务控制

    3. **事务属性**:`@Transactional`注解还支持一些可选属性,如`propagation`(传播行为)、`isolation`(隔离级别)、`timeout`(超时时间)和`rollbackFor`(指定需要回滚的异常类型)。例如,我们可以这样配置: ...

    Spring使用XML配置声明式事务

    在Spring框架中,声明式事务管理是实现事务处理的一种高效且灵活的方式,它允许开发者通过XML配置或注解来定义事务边界,而无需在业务逻辑代码中显式地调用开始、提交或回滚事务的方法。这篇博文"Spring使用XML配置...

    spring事务管理

    标题 "spring事务管理" 涉及到Spring框架中的核心特性——事务管理。Spring提供了强大的事务支持,使得在Java应用程序中处理事务变得简单且灵活。事务管理是数据库操作中的关键部分,确保数据的一致性和完整性。 ...

    Spring学习笔记之九--声明式事务

    注解中还可以设置不同的属性,如propagation(事务传播行为)、isolation(隔离级别)、timeout(超时时间)和read-only(只读事务)等,以满足不同场景的需求。 例如,在一个简单的Spring MVC应用中,你可能会在...

    Spring 注解学习手札(五) 业务层事务处理

    - `propagation`: 事务传播行为,定义当前事务如何与新事务进行交互。如`REQUIRED`(默认值,如果当前存在事务,则加入;否则新建一个事务)、`REQUIRES_NEW`(始终新建一个事务)等。 - `rollbackFor`: 指定哪些...

    spring配置hibernate事务

    首先,理解Spring的核心特性——控制反转(IoC)和面向切面编程(AOP)。IoC使得Spring能够管理对象的生命周期和依赖关系,而AOP则用于在不修改源代码的情况下添加额外的行为,如事务管理。 1. **配置Hibernate ...

    springMVC+MYBATIS事务管理

    它不直接处理事务,而是依赖于Spring的核心功能——IoC(Inversion of Control)容器和AOP(Aspect-Oriented Programming,面向切面编程)来管理事务。通过配置Spring的`PlatformTransactionManager`,我们可以声明...

    pring事务共9页.pdf.zip

    这9页的PDF文档很可能是对Spring事务管理的深入讲解,包括事务的ACID属性、事务的隔离级别、事务的传播行为以及事务的回滚规则等内容。 【描述】:这个描述简单明了,指出文档“Spring事务共9页.pdf.zip”是一个...

    spring-tx-4.2.xsd.zip

    《Spring框架中的事务管理——基于spring-tx-4.2.xsd的理解与应用》 在IT行业中,Spring框架因其强大的功能和灵活性而被广泛应用。它不仅简化了Java企业级应用的开发,还提供了丰富的功能模块,如依赖注入、面向切...

    Spring-JDBC整合-MySQL8、java8版本

    本知识点主要聚焦于Spring框架的一个重要组件——Spring JDBC,以及如何将它与MySQL8数据库进行整合,同时考虑了Java 8的新特性。下面我们将深入探讨这个主题。 Spring JDBC模块是Spring框架对Java数据库连接(JDBC...

    spring经典面试题

    面向切面编程(AOP)是Spring框架的一个关键特性,它允许开发者定义所谓的“横切关注点”——即那些跨越整个应用程序的公共关注点(如日志记录、安全性和事务管理)。通过AOP,这些服务可以被分离出来并独立于应用程序...

    transDemo.zip

    四、mybatis与Spring事务的整合 在MyBatis中,我们可以结合Spring的声明式事务管理,将SqlSessionTemplate或SqlSessionFactoryBean的事务管理交给Spring处理。通过在mybatis的配置文件中指定transactionManager,...

    Spring IOC DI AOP 事务)

    例如,事务传播特性定义了在一个事务中的方法如何参与到另一个事务中,如PROPAGATION_REQUIRED表示必须在一个事务中运行,如果当前没有事务,就会新建一个。事务隔离级别(如READ_UNCOMMITTED、READ_COMMITTED、...

    java面试相关

    - **配置事务特性**:通过`<tx:advice>`标签定义事务策略,例如事务的传播行为(propagation)、隔离级别(isolation)等。 - **关联事务配置**:使用`<aop:config>`标签将事务策略与业务逻辑关联起来,即指定哪些方法...

    java精典编程100例 38

    在Java中,事务处理可以通过多种方式实现,包括JDBC、JTA、Spring事务管理等。不同的应用场景和技术栈可能会选择不同的事务管理方案。 - **JDBC事务管理**:通过`Connection`对象提供的方法来控制事务的开始、提交...

Global site tag (gtag.js) - Google Analytics