Spring 事务

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.三个超级接口之间的关系

  1. 要进行事务管理,必须要配置TransactionManager(事务管理器) 进行事务管理

  2. 然后根据TransactionDefinition(事务定义信息),通过TransactionManager(事务管理器)进行事务管理

  3. 在事务的运行过程中,每个时刻都也已使用TransactionStatus(事务状态) 来查看当前的事务信息

posted @ 2018-12-06 22:11  觥筹啊觥筹  阅读(268)  评论(0编辑  收藏  举报