Spring事务管理机制
1. Spring 的事务管理机制
spring事务管理高层抽象主要包括三个接口,spring的事务主要是由他们共同完成的
- PlatformTransactionManager:事务管理器,被DispatcherServlet使用 ---主要用于平台相关事务管理
- TransactionDefinition: 事务定义信息(隔离,传播,超时,只读)
- 事务运行前,是需要被设置的,这个接口定义事务设置的参数
- TransactionStatus:事务具体的运行状态 --- 会务管理过程中,每个时间点事务的状态信息
1.1PlatformTransactionManager 事务管理器
使用管理器,调用它的具体一个实现类
该接口提供三个方法
返回值 | 方法 | 作用 |
---|---|---|
TransactionStatus | getTransaction(TransactionDefinition definition) | 获取事务配置信息 |
void | commit(TransactionStatus status) | 提交事务 |
void | rollback(TransactionStatus status) | 回滚事务 |
Spring为不同的持久层框架提供了不同的PlatformTransactionManager接口实现
事务 | 说明 |
---|---|
org.springframework.jdbc.datasource.DataSourceTransactionManager | 使用JDBC或者IBatis进行持久化数据时使用 |
SSM只用到这个,脑补去吧!!!!
当对应的持久层框架发生改变,对应的实现类也需要改变
- DataSourceTransactionManager针对JdbcTemplate,Mybatis事务控制,使用Connection(连接)进行事务控制
- 开启事务 connection.setAutoCommit(false); -- 关闭自动提交
- 提交事务 connection.commit();
- 回滚事务 connection.rollback();
1.2 TransactionDefinition 事务定义信息
返回值 | 方法名称 | 作用描述 |
---|---|---|
int | getIsolationLevel() | 获取事务隔离级别 |
String | getName() | 返回当前事务的名称 |
int | getPropagetionBeavior() | 事务的传播行为 |
int | getTimeout() | 事务的超时时间.默认为-1(不超时) |
boolean | isReadonly() | 事务是否设置为只读 |
该接口只有get方法而没有set方法
- 隔离级别概述
参数名称 | 作用描述 |
---|---|
DEFAULT | 使用数据库的默认隔离级别 |
READ_UNCOMMIT | 读未提交 |
READ_COMMIT | 读已提交 |
REPEATABLE_READ | 可重复读 |
SERIALIZABLE | 串行话 |
具体描述在WIZ的Mysql文件夹中
1.3 什么是事务的传播行为
如 A 和 B 两个方法都有对数据库的操作, 在使用事务的情况下, 同时调用,或者分开调用 多个对数据库的操作,
这种调用方式的区分叫做事务的传播行为
1.4TransactionStatus 事务信息类
返回值 | 方法名 | 描述 |
---|---|---|
void | flush() | 给一些ORM框架使用,用来执行sql语句 |
boolean | hasSavapoint() | 是否有保留点(不执行的部分) |
boolean | isCompleted() | 是否执行完成 |
boolean | isNewTransaction() | 是否是一个新开的事务 |
boolean | isRollbackonly | 是否只回滚 |
void | setRollbackonly | 设置是否为知回滚 |
2.三个超级接口之间的关系
-
要进行事务管理,必须要配置TransactionManager(事务管理器) 进行事务管理
-
然后根据TransactionDefinition(事务定义信息),通过TransactionManager(事务管理器)进行事务管理
-
在事务的运行过程中,每个时刻都也已使用TransactionStatus(事务状态) 来查看当前的事务信息