spring总结——事务管理
2018-02-22 10:16
330 查看
前言:
对于事务在之前事务这篇总结中有过介绍,这里就不详细说明,进行简单的回顾,然后结合spring来认识事务。事务回顾:
一:什么是事务
事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败。二:事务特性
1)原子性 :强调事务的不可分。2)一致性 :事务的执行的前后数据的完整性保持一致。
3)隔离性 :一个事务执行的过程中,不应该受到其他事务的干扰。
4)持久性 :事务一旦结束,数据就持久到数据库。
三:不考虑隔离性引发的安全性问题
1)脏读:一个事务读到了另一个事务的未提交的数据2)不可重复读 :一个事务读到了另一个事务已经提交的 update 的数据导致多次查询结果不一致.
3)虚幻读:一个事务读到了另一个事务已经提交的 insert 的数据导致多次查询结果不一致.
四:解决读问题:设置事务隔离级别
1)未提交读:脏读,不可重复读,虚读都有可能发生2)已提交读:避免脏读。但是不可重复读和虚读有可能发生
3)可重复读:避免脏读和不可重复读.但是虚读有可能发生.
4)串行化的:避免以上所有读问题.
Mysql 默认:可重复读
Oracle 默认:读已提交
Spring进行事务管理一组API:
一:PlantformTransactionManager:平台事务管理器
1)org.springframework.jdbc.datasource.DataSourceTransactionManage使用 SpringJDBC 或 iBatis 进行持久化数据时使用2)org.springframework.orm.hibernate3.HibernateTransactionManager使用Hibernate 版本进行持久化数据时使用
二: TransactionDefinition:事务定义信息
1)隔离级别2)传播行为
3)超时信息
4)是否只读
传播行为:
PROPAGION_XXX:事务的传播行为* 保证同一个事务中
PROPAGATION_REQUIRED:支持当前事务,如果不存在 就新建一个(默认)
PROPAGATION_SUPPORTS:支持当前事务,如果不存在,就不使用事务
PROPAGATION_MANDATORY:支持当前事务,如果不存在,抛出异常
* 保证没有在同一个事务中
PROPAGATION_REQUIRES_NE:如果有事务存在,挂起当前事务,创建一个新的事务
PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行
三:TransactionStatus:事务的状态
记录事务的状态平台事务管理根据事务定义的信息进行事务的管理,事务管理的过程中产生一些状态,将这些状态记录到TransactionStatus里面。
举例:
//设置事务的隔离级别是重复读;传播行为是默认的支持当前事务,如果不存在就新建一个;是否只读:false可操作 @Transactional(isolation.Isolation.REPEATABLE_READ,propagation=Propagation.REQUIRED,readOnly=false)
总结:
关于使用spring完成事务管理的学习先总结这么多,具体的应用还有待提高,总结有不合理的地方还望留言指出。大家共同进步和成长。相关文章推荐
- spring 事务管理的学习总结
- Spring 事务管理总结
- Spring总结4—对持久层的支持(附:事务管理)
- 关于spring管理事务的学习总结。
- spring 事务管理配置总结
- Spring总结之事务管理
- 对Spring 容器管理事务支持的总结
- Spring总结之事务管理
- spring事务管理总结
- [Spring框架]Spring 事务管理基础入门总结.
- Spring学习总结9(基于Hibernate的事务管理)
- spring事务管理使用总结 (重点)
- Spring的事务管理总结
- Spring4的知识应用总结(六)——Spring事务管理机制
- Spring 中的事务管理 小总结
- spring事务管理总结
- spring学习总结(十二):spring 中的事务管理
- [Spring框架]Spring 事务管理基础入门总结.
- Spring备忘——事务管理(编程式事务管理)
- 事务管理总结