Propagation:key属性确定代理应该给哪个方法增加事务行为。这样的属性最重要的部份是传播行为。有以下选项可供使用:
PROPAGATION_REQUIRED
——支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
比如说,ServiceB.methodB的事务级别定义为PROPAGATION_REQUIRED, 那么由于执行ServiceA.methodA的时候,ServiceA.methodA已经起了事务,这时调用ServiceB.methodB,ServiceB.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_REQUIRED,ServiceB.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。
相关推荐
- ` propagation`: 事务传播行为,定义了方法调用如何嵌套在事务中。例如,`PROPAGATION_REQUIRED`是最常见的,表示如果没有当前事务,就新建一个。 - ` isolation`: 隔离级别,如`ISOLATION_DEFAULT`、`ISOLATION...
### Spring事务与数据库操作 #### 一、Spring的声明式事务管理 在现代软件开发中,事务处理是非常关键的一部分,特别是在涉及多个数据操作时。Spring框架提供了强大的事务管理能力,可以方便地集成到应用程序中。...
3. **事务传播行为**:Spring.NET支持七种事务传播行为,如`REQUIRED`(如果当前存在事务,则加入,否则新建)、`SUPPORTS`(如果存在事务则参与,不存在则不开启新事务)、`MANDATORY`(如果存在事务则参与,不存在...
事务传播行为是理解Spring事务管理配置时的一个关键概念。除了`PROPAGATION_REQUIRED`外,Spring还支持其他几种传播行为,包括但不限于: - `PROPAGATION_SUPPORTS`:如果当前存在事务,则支持该事务;如果不存在...
3. **事务属性**:`@Transactional`注解还支持一些可选属性,如`propagation`(传播行为)、`isolation`(隔离级别)、`timeout`(超时时间)和`rollbackFor`(指定需要回滚的异常类型)。例如,我们可以这样配置: ...
在Spring框架中,声明式事务管理是实现事务处理的一种高效且灵活的方式,它允许开发者通过XML配置或注解来定义事务边界,而无需在业务逻辑代码中显式地调用开始、提交或回滚事务的方法。这篇博文"Spring使用XML配置...
标题 "spring事务管理" 涉及到Spring框架中的核心特性——事务管理。Spring提供了强大的事务支持,使得在Java应用程序中处理事务变得简单且灵活。事务管理是数据库操作中的关键部分,确保数据的一致性和完整性。 ...
注解中还可以设置不同的属性,如propagation(事务传播行为)、isolation(隔离级别)、timeout(超时时间)和read-only(只读事务)等,以满足不同场景的需求。 例如,在一个简单的Spring MVC应用中,你可能会在...
- `propagation`: 事务传播行为,定义当前事务如何与新事务进行交互。如`REQUIRED`(默认值,如果当前存在事务,则加入;否则新建一个事务)、`REQUIRES_NEW`(始终新建一个事务)等。 - `rollbackFor`: 指定哪些...
首先,理解Spring的核心特性——控制反转(IoC)和面向切面编程(AOP)。IoC使得Spring能够管理对象的生命周期和依赖关系,而AOP则用于在不修改源代码的情况下添加额外的行为,如事务管理。 1. **配置Hibernate ...
它不直接处理事务,而是依赖于Spring的核心功能——IoC(Inversion of Control)容器和AOP(Aspect-Oriented Programming,面向切面编程)来管理事务。通过配置Spring的`PlatformTransactionManager`,我们可以声明...
这9页的PDF文档很可能是对Spring事务管理的深入讲解,包括事务的ACID属性、事务的隔离级别、事务的传播行为以及事务的回滚规则等内容。 【描述】:这个描述简单明了,指出文档“Spring事务共9页.pdf.zip”是一个...
《Spring框架中的事务管理——基于spring-tx-4.2.xsd的理解与应用》 在IT行业中,Spring框架因其强大的功能和灵活性而被广泛应用。它不仅简化了Java企业级应用的开发,还提供了丰富的功能模块,如依赖注入、面向切...
本知识点主要聚焦于Spring框架的一个重要组件——Spring JDBC,以及如何将它与MySQL8数据库进行整合,同时考虑了Java 8的新特性。下面我们将深入探讨这个主题。 Spring JDBC模块是Spring框架对Java数据库连接(JDBC...
面向切面编程(AOP)是Spring框架的一个关键特性,它允许开发者定义所谓的“横切关注点”——即那些跨越整个应用程序的公共关注点(如日志记录、安全性和事务管理)。通过AOP,这些服务可以被分离出来并独立于应用程序...
四、mybatis与Spring事务的整合 在MyBatis中,我们可以结合Spring的声明式事务管理,将SqlSessionTemplate或SqlSessionFactoryBean的事务管理交给Spring处理。通过在mybatis的配置文件中指定transactionManager,...
例如,事务传播特性定义了在一个事务中的方法如何参与到另一个事务中,如PROPAGATION_REQUIRED表示必须在一个事务中运行,如果当前没有事务,就会新建一个。事务隔离级别(如READ_UNCOMMITTED、READ_COMMITTED、...
- **配置事务特性**:通过`<tx:advice>`标签定义事务策略,例如事务的传播行为(propagation)、隔离级别(isolation)等。 - **关联事务配置**:使用`<aop:config>`标签将事务策略与业务逻辑关联起来,即指定哪些方法...
在Java中,事务处理可以通过多种方式实现,包括JDBC、JTA、Spring事务管理等。不同的应用场景和技术栈可能会选择不同的事务管理方案。 - **JDBC事务管理**:通过`Connection`对象提供的方法来控制事务的开始、提交...