Spring事物管理简介 (转)
一、事物1、什么是事物
事物指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败
2、事物的特性
原子性:事物是一个不可分割的工作单位,事物中的操作要么都发生,要么都不发生
一致性:事物前后数据的完整性必须保持一致
隔离性:指多个用户并发访问数据库时,一个用户的事物不能被其他用户的事物所干扰,多个并发事物之间数据要相互隔离。
持久性:一个事物一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响。
二、事物的API介绍
Spring事物管理高层抽象主要包括3个接口:PlatformTransactionManager(事务管理器)、TransactionDefinition(事物定义信息)、TransactionStatus(事物具体运行状态)。
1、PlatformTransactionManager
Spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现
2、TransactionDefinition(1)定义隔离级别
如果不考虑隔离性,会引发如下安全问题:脏读、不可重复读、幻读
脏读:一个事物读取了另一个事物改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
不可重复读:在同一个事物中,多次读取同一数据返回的结果有所不同
幻读:一个事物读取了几行记录后,另一个事物插入一些记录,幻读就发生了,在后来的查询中,第一个事物就会发现有些原来没有的记录。
事物的隔离级别就是用来解决以上问题:
Mysql数据库用的是REPEATABLE_READ隔离级别
Oracle数据库用的是READ_COMMITTED隔离级别
(2)定义事物传播行为
三、实战
Spring支持俩种方式事务管理
--编程式的事务管理
◎在实际应用中很少使用
◎通过TransactionTemplate手动管理事物
--使用XML配置声明式事物
◎开发中推荐使用(代码侵入性最小)
◎Spring的声明式事物是通过AOP实现的
1、编程式事务管理
手动编写代码进行事物管理(很少使用)
(1)在AccountService中使用TransactionTemplate
(2)TransactionTemplate依赖DataSourceTransactionManager
(3)DataSourceTransactionManager依赖DataSource构造
2、声明式事务管理
(1)基于TransactionProxyFactoryBean的方式
缺点:每需要对一个类进行事物管理,就需要配置一次,维护不方便
(2)基于AspectJ的XML方式(经常使用)
3、基于注解的方式(经常使用)
在需要事物管理的类上面加上注解
最新文章
- [C++11][算法][穷举]输出背包问题的所有可满足解
- 【MySQL】事务没有提交导致 锁等待Lock wait timeout exceeded异常
- CodeForces 489B (贪心 或 最大匹配) BerSU Ball
- mysql数据库全局只读和会话只读问题解析
- 【实习记】2014-08-22试用SSH客户端XShell与SecuretyCRT与MobaXterm总结
- Demo_敌军坦克生成,坦克移动(可以拓展发射子弹,敌军消失获取分数或者添加动画,声音功能)
- 属性";XmlFileName";的代码生成失败
- iOS文档序列化(对象归档)
- 认识div在排版中的作用
- div使用
- ZAB协议与Paxos算法
- 12.Mysql存储过程和函数
- Luogu 2157 [SDOI2009]学校食堂 - 状压dp
- [UE4]移动设备贴图消失
- javascript数组元素的添加、删除与插入以及参数数组的使用
- SQL Server, Cannot resolve the collation conflict
- vue + element-ui 制作tab切换(切换vue组件,踩坑总结)
- 108th LeetCode Weekly Contest Binary Subarrays With Sum
- vue入门----------路由配置
- IOS NSBundle使用(访问文件夹)
热门文章
- android4.4系统解决“ERRORcouldn&;#39;t find native method”方法
- 【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]
- FFmpeg来源简单分析:结构会员管理系统-AVClass
- Nginx http filter异常排查
- 潜移默化学会WPF(转载篇)--屏幕显示Label,鼠标移上去变成textBox
- 线程安全ConcurrentBag
- Qt SQLite 批量插入优化(SQLite默认将每条语句看成单独的事务)good
- C# .NET锁屏程序(顺带屏蔽任务管理器)
- 2018年Unity结合Android SDK下载安装及配置教程
- Hive-分组之后取前n个