spring事务理解

1.事务的隔离级别
REQUIRED:如果存在一个事务,则在当前事务中执行,如果没有存在一个事务,在需要开启一个事务。
SUPPORTS:如果存在一个事务,则在当前事务中执行,如果没有存在一个事务,则不在事务中执行。
MANDATORY(强制性mandatory):如果存在一个事务,则在当前事务中执行,如果没有存在一个事务,则抛出异常。
REQUIRES_NEW:总是开启一个事务,如果存在一个事务,则把这个事务挂起。在开启的新事务中执行。
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常
PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作
注:
1.对于上面说的,都是在方法中。如下面方法:
managePersonRxTd(id){
deletePerson(id)
updateAdd(id)
}
如果是deletePerson方法配置的为REQUIRED,如果managePersonRxTd方法存在事务,则deletePerson在managePersonRxTd的事务中运行。
否则deletePerson在自己的事务中运行。
2.事务都是针对方法的,但是spring声明式事务是配置到类的,也就是那些类参与事务。如下面的配置,aop:config是配置参与事务的类
3.事务是一个整体。
4.一般是有嵌套事务的

<bean id="cmsTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="xcmDataSource" />
</property>
</bean>
<aop:config>
<aop:pointcut id="cmsManagerServiceMethod"
expression="execution(* com.xcm.cms.service..*Service*.*(..))" />
<aop:advisor advice-ref="possTxAdvice" pointcut-ref="cmsManagerServiceMethod"/>
</aop:config>

<tx:advice id="possTxAdvice" transaction-manager="cmsTransactionManager">
<tx:attributes>
<tx:method name="*" propagation="SUPPORTS" rollback-for="com.common.item.base.exception.AppException" />
<tx:method name="insert*" propagation="REQUIRED" rollback-for="com.common.item.base.exception.AppException" />
<tx:method name="create*" propagation="REQUIRED" rollback-for="com.common.item.base.exception.AppException" />
<tx:method name="delete*" propagation="REQUIRED" rollback-for="com.common.item.base.exception.AppException" />
<tx:method name="update*" propagation="REQUIRED" rollback-for="com.common.item.base.exception.AppException" />
<tx:method name="*SpTx" propagation="SUPPORTS" rollback-for="com.common.item.baseexception.AppException" />
<tx:method name="*NsTx" propagation="NOT_SUPPORTED" />
<tx:method name="*RnTx" propagation="REQUIRES_NEW" rollback-for="com.common.item.base.exception.AppException" />
</tx:attributes>
</tx:advice>

时间: 2024-08-15 00:19:41

spring事务理解的相关文章

深入理解 Spring 事务原理

一.事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的.对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: 获取连接 Connection con = DriverManager.getConnection() 开启事务con.setAutoCommit(true/false); 执行CRUD 提交事务/回滚事务 con.commit() / con.rollback(); 关闭连接 conn.close(); 使

理解 spring 事务传播行为与数据隔离级别

事务,是为了保障逻辑处理的原子性.一致性.隔离性.永久性. 通过事务控制,可以避免因为逻辑处理失败而导致产生脏数据等等一系列的问题. 事务有两个重要特性: 事务的传播行为 数据隔离级别 1.事务传播行为(Transaction Behavior) 传播行为级别,定义的是事务的控制范围.通俗点说,执行到某段代码时,对已存在事务的不同处理方式. Spring 对 JDBC 的事务隔离级别进行了补充和扩展,并提出了 7 种事务传播行为. 1)Spring 中提供的 7 种传播行为 PROPAGATIO

透彻理解Spring事务设计思想之手写实现

前言 事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性).在实际开发中,我们对事务应用最多就是在数据库操作这一环,特别是Spring对数据库事务进行了封装管理.Spring对事务的支持,确实很强大,但是从本质上来讲:事务是否生效取决数据库底层是否支持(比如MySQL的MyISAM引擎就不支持事务,Spring能奈何!),同时一

spring事务传播性理解

什么是spring的事务传播性 个人的理解, 首先先说一下事务传播性,事务传播性就是,事务中还包括另外的事务,事务之间是怎么相互影响,然后如何执行的,这就是事务传播性 spring事务传播性就是spring中是如何去规定事务是如何执行的,情况如下: public class DemoServiceA { //事务A @Transactional(propagation=Propagation.REQUIRED)//对于外层事务来说(相对的,如果demoMthodA加到demoMthodC中,de

深入理解事务--Spring事务的传播机制

https://blog.csdn.net/yuanlaishini2010/article/details/45792069 事务的嵌套概念 所谓事务的嵌套就是两个事务方法之间相互调用.spring事务开启 ,或者是基于接口的或者是基于类的代理被创建(注意一定要是代理,不能手动new 一个对象,并且此类(有无接口都行)一定要被代理--spring中的bean只要纳入了IOC管理都是被代理的).所以在同一个类中一个方法调用另一个方法有事务的方法,事务是不会起作用的. ### Spring默认情况

Spring事务管理(详解+实例)

写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

Spring事务管理

写这篇博客之前我首先读了<spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: Spring事务机制详解 Spring事务配置的五种方式 Spring中的事务管理实例详解 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱:然后ATM出1000元钱.这两个步骤必须是要么都执行要么都

功能第四篇——事务之Spring事务()

综述 事务的实现方式有三种,JTA,Spring事务,Web Container方式.本篇讲述Spring事务. Spring事务分为两个部分核心对象,Spring事务的实现方式. Spring事务实现的方式有三种.声明式,注解式,代码的方式.声明方式在实际项目中运用比较广泛,注解方式需要在每个方法上添加@Transactional注解,代码冗余度比较高.代码方式只是为了更好的理解Spring事务的机制,在实际项目中并不适用. 核心对象 PlatformTransactionManager 事务

spring事务传播属性与隔离级别

一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用: PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务.这是最常见的选择.PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行.PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常.PROPAGATION_R