Spring事务
2018-04-04 本文已影响0人
WinnXUDONG
什么是事务?
事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全不失败。
例如:
银行转账,A转给B 100元
1、A的卡中扣掉100元
2、B的卡中增加100元
转账完成,这2个步骤就是一个事务。特点就是1和2必须保证同时成功,或同时失败。
事务的特性
1 . 原子性
2 . 一致性
3 . 隔离性
4 . 持久性
原子性
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性
一致性指事务前后数据的完整性必须保持一致
隔离性
隔离性指多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离。
持久性
持久性指一个事物一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响。
Spring事务管理
Spring事务管理高层抽象主要包括3个接口
- PlatformTransactionManager
-- 事务管理器(真正管理事务的接口) - TransactionDefinition -- 事务定义信息(隔离级别、传播、超时、只读)
- TransactionStatus -- 事务具体运行状态
PlatformTransactionManager
Spring为不同的持久化框架提供了不同PlatFormTransactionManager接口实现

TransactionDefinition
隔离级别:解决脏读,不可重复读,幻读。
脏读:一个事物读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。
不可重复读:在同一事物中,多次读取统一数据返回的结果有所不同。
幻读:一个事物读取了几行记录,另一行事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。

传播行为:事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。

事务的七种传播行为:

七种传播行为分为三类,前三种为一类最重要的是第一个,接着的三种为一类最重要的是第一个,最后一个为一类。
TransactionStatus
TransactionStatus接口可以让事务管理器控制事务的执行,可以检查事务是不是一个新事务,或者是否只读,或者事务的状态。TransactionStatus还可以初始化回滚操作。
Spring支持两种方式事务管理
- 编程式的事务管理
- 在实际应用中很少使用
- 通过TransactionTemplate手动管理事务
- 使用XML配置声明式事务
- 开发中推荐使用(代码侵入性最小)
- Spring的声明式事务是通过AOP实现的