spring事务管理高层抽象的主要3个接口:
PlatformTransactionManager 事务管理器
TransactionDefinition 事务定义信息(隔离、传播、超时、只读)
TransactionStatus 事务具体运行状态
一、Interface PlatformTransactionManager
Spring为不同的持久化框架提供了不同的PlatformTransactionManager.
内部继承关系如下:
二、Interface TransactionDefinition
1、事务的隔离级别:
DEFAULT:使用后端数据库默认的隔离级别
READ_UNCOMMITTED:允许读取还未提交的改变了的数据。可能导致脏、幻、不可重复读
READ_COMMITTED:允许在并发事务已经提交后读取。可防止脏读,但幻读和不可重复读仍可能发生(Oracle默认使用的隔离级别)
REPEATABLE_READ:对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读可能发生(Mysql默认使用的隔离级别)
SERIALIZABLE:完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的
2、事务的传播行为:(解决业务层方法之间的相互调用问题)
PROPAGATION_REQUIRED:支持当前事务,如果不存在就新建一个
PROPAGATION_SUPPORTS:支持当前事务,如果
不存在,就不使用事务
PROPAGATION_MANDATORY:支持当前事务,如果不存在,抛出异常
PROPAGATION_REQUIRES_NEW:如果有事务存在,挂起当前事务,创建一个新的事务
PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER:以非事务方式运行,如果有事务存在,抛出异常
PROPAGATION_NESTED:如果当前事务存在,则嵌套事务执行
三、Interface TransactionStatus
Spring事务管理
Spring支持两种方式事务管理:
- 编程式的事务管理(实际应用中很少使用)
- 使用XML配置声明式事务(推荐使用,代码侵入性最小。通过AOP实现)
后续继续介绍。