spring事务管理
2016-09-07 08:42
288 查看
课程目标:
1.事务的回顾:事务的基本概念和特性
2.spring事务管理的一组API
3.spring的编程式事务管理
4.spring的声明式事务管理
一、事务的回顾
什么是事务?事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。
以银行转账为例:
不应该出现张三的钱转成功,但是由于突然断电的原因,李四并没有收到钱,这是不正确的。
所以我们把这整个操作当做一个事务,等他全部成功后,再提交数据commit。
事务的特性:
原子性:是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:是指事务前后数据的完整性必须保持一致。
隔离性:是指多个用户并发访问数据时,不能发生互相干扰。数据库中可以设置相应的级别用于隔离。
持久性:是指事务一旦被提交,它对数据库中数据的改变是永久的,即使数据库发生故障,也不会有任何影响。
二、事务的API介绍
spring中提供了一系列的接口,用来事务管理。其中包括三个接口:
platform transaction manager :平台事务管理器 真正用来管理事务的接口,其中包含了事务的提交和回滚
transaction definition :事务定义信息(隔离,传播,超时,只读)事务操作的隔离级别,是否超时等
transaction status :事务具体运行状态 事务是不是已经提交
三个的联系:
他会首先根据我们事务的定义信息,由平台事务管理器真正进行事务的管理,在管理过程中事务会产生相应的状态,而这些状态就保存在事务具体运行状态中。
platform transaction manager :平台事务管理器
在ssh框架整合中,applicationcontext.xml里面的对事务的配置信息所继承的类就是Hibernate Transaction Manager,而这个类实现的就是platform transaction manager这个接口。
spring为不同的持久化框架提供了不同的platform transaction manager接口实现。
transaction definition :事务定义信息(隔离;传播,超时,只读)
定义了一组常量和方法,包括以isolation开头的五个常量和可以获得隔离级别。
如果不考虑隔离性问题,会引发安全问题如下:
脏读:一个数据读取了另一事务改写但并未提交的数据,如果这些数据被回滚,那么读到的数据是无效的。
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。对更新数据而言
幻读:一个事务读取了几行记录,另一事务插入一些数据,这时候幻读就发生了。对插入数据而言
MySQL采用默认的repeatable_read这个级别,而Oracle采用默认的read_committed这个级别。
事务传播行为,用以解决业务层方法之间的相互调用,事务应该加在业务层。
transaction status :事务的状态 保存的就是运行时的一些状态
三、转账环境的搭建
spring支持两种方式事务管理:
编程式的事务管理
在实际应用中很少使用
通过Transaction Template手动管理事务
使用XML配置声明式事务(重点)
开发中推荐使用(代码侵入性最小)
spring的声明式事务是通过AOP实现的
四、基于注解的事务管理
applicationContext.xml里面:
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 开始注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
每一个Service上面都要写@Transaction
这样在每一次调用Service层的时候,都使用注解的方法,从而调用applicationContext.xml里面的事务管理,也就是实现HibernateTransactionManager这个类,而该类实现的transaction manager这个接口。这也就说明事务的commit,都交给了系统的一些接口,无须自己提交事务。
1.事务的回顾:事务的基本概念和特性
2.spring事务管理的一组API
3.spring的编程式事务管理
4.spring的声明式事务管理
一、事务的回顾
什么是事务?事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。
以银行转账为例:
不应该出现张三的钱转成功,但是由于突然断电的原因,李四并没有收到钱,这是不正确的。
所以我们把这整个操作当做一个事务,等他全部成功后,再提交数据commit。
事务的特性:
原子性:是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性:是指事务前后数据的完整性必须保持一致。
隔离性:是指多个用户并发访问数据时,不能发生互相干扰。数据库中可以设置相应的级别用于隔离。
持久性:是指事务一旦被提交,它对数据库中数据的改变是永久的,即使数据库发生故障,也不会有任何影响。
二、事务的API介绍
spring中提供了一系列的接口,用来事务管理。其中包括三个接口:
platform transaction manager :平台事务管理器 真正用来管理事务的接口,其中包含了事务的提交和回滚
transaction definition :事务定义信息(隔离,传播,超时,只读)事务操作的隔离级别,是否超时等
transaction status :事务具体运行状态 事务是不是已经提交
三个的联系:
他会首先根据我们事务的定义信息,由平台事务管理器真正进行事务的管理,在管理过程中事务会产生相应的状态,而这些状态就保存在事务具体运行状态中。
platform transaction manager :平台事务管理器
在ssh框架整合中,applicationcontext.xml里面的对事务的配置信息所继承的类就是Hibernate Transaction Manager,而这个类实现的就是platform transaction manager这个接口。
spring为不同的持久化框架提供了不同的platform transaction manager接口实现。
transaction definition :事务定义信息(隔离;传播,超时,只读)
定义了一组常量和方法,包括以isolation开头的五个常量和可以获得隔离级别。
如果不考虑隔离性问题,会引发安全问题如下:
脏读:一个数据读取了另一事务改写但并未提交的数据,如果这些数据被回滚,那么读到的数据是无效的。
不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。对更新数据而言
幻读:一个事务读取了几行记录,另一事务插入一些数据,这时候幻读就发生了。对插入数据而言
MySQL采用默认的repeatable_read这个级别,而Oracle采用默认的read_committed这个级别。
事务传播行为,用以解决业务层方法之间的相互调用,事务应该加在业务层。
transaction status :事务的状态 保存的就是运行时的一些状态
三、转账环境的搭建
spring支持两种方式事务管理:
编程式的事务管理
在实际应用中很少使用
通过Transaction Template手动管理事务
使用XML配置声明式事务(重点)
开发中推荐使用(代码侵入性最小)
spring的声明式事务是通过AOP实现的
四、基于注解的事务管理
applicationContext.xml里面:
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 开始注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
每一个Service上面都要写@Transaction
这样在每一次调用Service层的时候,都使用注解的方法,从而调用applicationContext.xml里面的事务管理,也就是实现HibernateTransactionManager这个类,而该类实现的transaction manager这个接口。这也就说明事务的commit,都交给了系统的一些接口,无须自己提交事务。
相关文章推荐
- Spring事务管理-声明式(1)(转)
- Spring事务管理
- spring事务管理(三)--用BeanNameAutoProxyCreator自动创建事务代理
- Spring事务管理-aop切入配置
- Spring事务管理
- spring事务管理 出现的问题
- Spring事务管理—aop:pointcut 属性expression格式说明
- Spring事务管理与数据库隔离级别的关系(Spring+mysql)
- spring事务管理几种方式(转)
- spring事务管理
- Spring事务管理
- spring事务管理(续)
- Spring学习8-Spring事务管理(注解式声明事务管理)
- 关于Hibernate使用spring事务管理的错误
- Spring事务管理
- Spring学习8-Spring事务管理(AOP/声明式式事务管理)
- Spring事务管理
- Spring事务管理与数据库隔离级别的关系(Spring+mysql)
- spring事务管理