事务管理
- 事务 :一组业务操作ABCD 要么全部成功,要么全部失败
- 特性:ACID
原子性:整体
一致性:完成
隔离性:并发
持久性:结果
脏读:一个事务读到另一个事务没有提交的数据
不可重复读:一个事务读到另一个事务已提交的数据(update)
虚读(幻读):一个事务读到另一个事务已提交的数据(insert)
read uncommitted:读未提交 存在三个问题
read committed:读已提交.解决脏读,存在2个问题
repeatable read:可重复读,解决:脏读,不可重复,存在一个问题
serialzable:串行化,都解决,单事务
2.2 事务管理结束
2.2.1 导入 jar包
2.2.2 三个顶级接口
- PlatformtransactionManager 平台事务管理器,spring要管理事务,必须使用事务管理器
- TransactionDefinition 事务详情(事务定义,事务属性),spring用于确定事务具体详情,例如:隔离级别,是否只读,超时时间 等(进行事务配置时,必须配置详情,spring将配置项封装到该对象实例)
- TransactionStatus:事务状态,spring用于记录当前事务运行状态,例如:是否有保存点,事务是否完成(spring底层根据状态进行相应操作)
2.2.3 PlatformtransactionManager 事务管理器
DataSourceTransactionManager ---jdbc 开发时事务管理器,采用JdbcTemplate
HibernateTransactionManager ---hibernate开发时事务管理器,整合hibernate
//事务管理器 通过"事务详情",获取"事务状态",从而管理事务
TransactionStatus getTransaction(TransactionDefinition defintion),
//根据状态提交
void commit(TransactionStatus status)
//根据状态回归
void rollback(TransactionStatus status)
2.2.4 TransactionStatus 事务的状态
isNewTransaction() 是否是新的事务
hasSavepoint() 是否有保存点
setRollbackOnly() 设置回滚
isRollbackOnly() 是否回滚
flush() 刷新
isCompleted() 是否完成
2.2.5 TransactionDefinition 事务详情
getPropagationBehavior() 传播行为
getIsolationLevel() 隔离级别
getTimeout() 获取超时时间
isReadOnly() 是否只读(增删改:读写;查询:只读)
getName():String 配置事务详情名称,一般方法名称.例如:save.add * 等
传播行为:在两个业务之间如何共享事务
网友评论