Spring事务管理总结
来源:互联网 发布:php一般用什么开发工具 编辑:程序博客网 时间:2024/06/16 07:34
Spring事务管理:
Spring事务管理高层抽象主要包括3个接口
(1)PlatformTransactionMannager事务管理器(提交,回滚等)
(2)TransactionDefinition事务定义信息(隔离,传播,超时,只读)
(3)TransactionStatus 事务具体运行状态
一、PlatformTransactionMannager事务管理器
spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现
例如:使用spring JDBC或mybatis 进行持久化数据时使用:DataSoourceTransactionManager
使用Hibernate3.0版本进行持久化数据时使用:HibernateTransactionManager
二、TransactionDefinition事务定义信息
脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就产生了
事务隔离级别:
READ_UNCOMMITED 允许读取还未提交的改变了的数据,可导致脏、幻、不可重复读
READ_COMMITTED 允许在并发事务已经提交后读取。可防止脏读,但幻读,不可重复读仍可导致
REPEATABLE_READ 对相同字段的多次读取是一致的,除非数据被事务本身改变,可防止脏、不可重复读,但幻读可能发生
SERIALIZABLE 完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中设计的数据表来完成的。
事物的传播行为:解决业务层之间的互相调用问题(主要介绍三种)
PROPAGATION_REQUIRED 支持当前事务,如果不存在就新建一个
PROPAGATION_REQUIRES_NEW 如果有事物存在,挂起当前事务,创建一个新的事务
PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行
三、TransactionStatus 事务具体运行状态
里面定义了一些方法里进行判断当前事务。例如:
hasSavepoint()是否有保存点
isCompleted()是否已经完成
isNewTransaction()是否是一个新的事务
Spring支持两种方式的事务管理
1.编程式的事务管理
2.使用XML配置声明式事务
Spring的声明式事务是通过AOP实现的
方式一:基于TransactionProxyFactoryBean代理 实现事务
方式三:基于AspectJ的注解方式事务管理
Spring事务管理高层抽象主要包括3个接口
(1)PlatformTransactionMannager事务管理器(提交,回滚等)
(2)TransactionDefinition事务定义信息(隔离,传播,超时,只读)
(3)TransactionStatus 事务具体运行状态
一、PlatformTransactionMannager事务管理器
spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现
例如:使用spring JDBC或mybatis 进行持久化数据时使用:DataSoourceTransactionManager
使用Hibernate3.0版本进行持久化数据时使用:HibernateTransactionManager
二、TransactionDefinition事务定义信息
脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。
幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就产生了
事务隔离级别:
READ_UNCOMMITED 允许读取还未提交的改变了的数据,可导致脏、幻、不可重复读
READ_COMMITTED 允许在并发事务已经提交后读取。可防止脏读,但幻读,不可重复读仍可导致
REPEATABLE_READ 对相同字段的多次读取是一致的,除非数据被事务本身改变,可防止脏、不可重复读,但幻读可能发生
SERIALIZABLE 完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中设计的数据表来完成的。
事物的传播行为:解决业务层之间的互相调用问题(主要介绍三种)
PROPAGATION_REQUIRED 支持当前事务,如果不存在就新建一个
PROPAGATION_REQUIRES_NEW 如果有事物存在,挂起当前事务,创建一个新的事务
PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行
三、TransactionStatus 事务具体运行状态
里面定义了一些方法里进行判断当前事务。例如:
hasSavepoint()是否有保存点
isCompleted()是否已经完成
isNewTransaction()是否是一个新的事务
Spring支持两种方式的事务管理
1.编程式的事务管理
通过TransactionTemplate手动管理事务(实际中很少用)<!-- 事务模板 --><bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate"><property name="transactionManager" ref="transactionManager"/></bean><!-- 事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean><!-- 在service层使用事务模板 --><bean id="accontServiceImpl" class="cn.edu.sdut.service.impl.AccontServiceImpl"><property name="accountDao" ref="accountDaoImpl"></property><property name="transactionTemplate" ref="transactionTemplate"/></bean>
//业务方法public void transfer(final String out, final String in, final Double money) {transactionTemplate.execute(new TransactionCallbackWithoutResult(){@Overrideprotected void doInTransactionWithoutResult(TransactionStatus arg0) {accountDao.inMoney(in, money);accountDao.outMoney(out, money);}});}
2.使用XML配置声明式事务
Spring的声明式事务是通过AOP实现的
方式一:基于TransactionProxyFactoryBean代理 实现事务
<bean id="transactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><!-- 事务管理 --><property name="transactionManager" ref="transactionManager"/><!-- 代理对象--><property name="target" ref="accountServiceImpl2"/><!-- 设置事务参数 --><property name="transactionAttributes"><props><!--prop 格式: PROPAGATION : 事物的传播行为 ISOLATION : 事务的隔离级别 readOnly :只读(不可以进行修改的) -Exception :发生哪些异常回滚事务 +Exception :发生哪些异常事务不回滚 --><prop key="transfer">PROPAGATION_REQUIRED</prop><prop key="find*">PROPAGATION_REQUIRED,readOnly</prop></props></property></bean><!-- 事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>方式二:基于AspectJ的XML方式事务管理
<!-- 配置事务通知(事务的增强) --><tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!-- propagation:事物的传播行为 isolation:事物的隔离级别 read-only:只读 rollback-for:发生哪些异常回滚 no-rollback-for:发生那些异常不回滚 timeout : 超时期限 --> <tx:method name="transfer" propagation="REQUIRED" isolation="DEFAULT" read-only="false" timeout="-1"/> </tx:attributes></tx:advice><!-- 配置切面 --><aop:config><aop:pointcut expression="execution(* cn.edu.sdut.service.impl.AccountServiceImpl3.*(..))" id="pc1"/><aop:advisor advice-ref="txAdvice" pointcut-ref="pc1"/></aop:config><!-- 事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/></bean>
方式三:基于AspectJ的注解方式事务管理
<!-- 开启注解方式 --><tx:annotation-driven transaction-manager="transactionManager"/><!-- 事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"/>@Transactional(propagation=Propagation.REQUIRED)/*<!--propagation:事物的传播行为isolation:事物的隔离级别read-only:只读rollback-for:发生哪些异常回滚no-rollback-for:发生那些异常不回滚timeout : 超时期限 -->*/
阅读全文
1 0
- spring事务管理配置总结
- Spring总结之事务管理
- Spring总结之事务管理
- spring事务管理总结
- spring 事务管理配置总结
- spring事务管理总结 .
- spring事务管理总结
- spring事务管理总结
- Spring的事务管理总结
- spring事务管理使用总结
- spring事务管理总结
- Spring事务管理总结
- Spring 事务管理总结
- Spring事务管理总结
- spring中的事务管理(总结)
- spring 事务管理的学习总结
- Spring 知识点总结 之 事务管理
- Spring 事务管理学习总结篇
- AtCoder Grand Contest 001 C
- Linux root 用户下 selenium 运行chrome --no-sandbox的问题的解决
- opcode 查询,opcode 汇总
- bzoj1880: [Sdoi2009]Elaxia的路线
- 软件构造 课堂笔记6
- Spring事务管理总结
- MD5加密算法
- DOS中del和rd的区别
- 机器学习笔记1绪论----教材周志华西瓜书
- 如何分辨设备并判断机型???
- 新手上路之List,HashMap遍历二(1对多) 笔记总结
- Java 数组拷贝
- 动态顺序表C++实现
- 2018小红书笔试题第一题