A.概念
1.事务的概念
事务是逻辑上一组操作,组成这组操作各个逻辑单元,要么一起成功,要么一起失败。
2.事务的特性
原子性
一致性
隔离性
持久性
如果不考虑隔离性,引发安全问题.
读问题
脏读
不可重复读
虚读
写问题
丢失更新
解决读问题:设置事务隔离级别
read uncommitted
read committed
repeatable read
Serializable
B. Spring事务管理的API
PlatformTransactionManager,是spring的平台事务管理器,它里面提供了我们常用的操作事务的方法.
开发中都是使用它的实现类
真正管理事务的对象
org.springframework.jdbc.datasource.DataSourceTransactionManager 使用Spring
JDBC或iBatis 进行持久化数据时使用
org.springframework.orm.hibernate3.HibernateTransactionManager 使用Hibernate版本进行持久化数据时使用
2.TransactionDefinition事务的定义信息对象
事务的隔离级别(重点)
.事务的传播行为(重点)
REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。一般的选择(默认值)
REQUERS_NEW:新建事务,如果当前在事务中,把当前事务挂起。
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行(没有事务)
MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
NEVER:以非事务方式运行,如果当前存在事务,抛出异常
NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行REQUIRED类似的操作。
超时时间
默认值是-1,没有超时限制。如果有,以秒为单位进行设置。
事务是否只读(重点)
建议查询时设置为只读。
TransactionStatus此接口提供的是事务具体的运行状态
小结:Spring框架进行事务的管理,首先使用TransactionDefinition对事务进行定义。通过PlatformTransactionManager根据TransactionDefinition的定义信息进行事务的管理。在事务管理过程中产生一系列的状态:保存到TransactionStatus中。