Spring 事务

一.事务的概念
事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败

二.事务的特性(ACID)
原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生
一致性:事务前后数据的完整性必须保持一致
隔离性:多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离
持久性:一个事务一旦被提交,它对数据库中数据的改变就是永久性的,即使数据库发生故障也不应该对其有任何影响

三.Spring 事务管理接口
3.1 高层抽象接口
~PlatformTransactionManager 事务管理器
Spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现 在项目中需要根据持久层框架来选择对应的事务管理器
1.DataSourceTransactionManager - 使用Spring JDBC或者iBatis进行持久化数据时使用
2.HibernateTransactionManager - 使用Hibernate3.0版本进行持久化数据时使用
3.JpaTransactionManager - 使用JPA进行持久化时使用
4.JdoTransactionManager - 当持久化机制是Jdo时使用
5.JtaTransactionManager - 使用一个JTA实现来管理事务,在一个事务跨越多个资源时必须使用

~TransactionDefinition 事务定义信息(隔离,传播,超时,只读)

不考虑事务的隔离级别,会导致以下问题:
脏读:一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的

不可重复读:在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改提交而引起的

幻读:一个事务读取了几张记录之后,另外一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录

*事务隔离级别(四种)
ISOLATION_DEFAULT -使用后端数据库默认的隔离级别
 
ISOLATION_READ_UNCOMMITTED - 允许你读取还未提交的改变了的数据。可能发生脏,幻,不可重复读
ISOLATION_READ_COMMITTED - 允许在并发事务已经提交后读取。可防止脏读,但幻读和不可重复读仍可发生(Oracle的默认隔离级别)
ISOLATION_REPEATABLE_READ - 对相同字段的多次读取时一致的。可防止脏,不可重复读,但幻读扔可发生(MySql的默认隔离级别)
ISOLATION_SERIALIZABLE 完全服从ACID的隔离级别,但是代价最大、所有的事务都是按顺序一个接一个的执行。 

*事务的传播行为(7种)
PROPAGATION_REQUIRED 当前如果有事务,Spring就会使用该事务;否则会开始一个新事务。 
PROPAGATION_SUPPORTS 当前如果有事务,Spring就会使用该事务;否则不会开启一个新事务。 
PROPAGATION_MANDATORY 当前如果有事务,Spring就会使用该事务;否则会抛出异常。 
PROPAGATION_REQUIRES_NEW Spring总会开始一个新事务。如果当前有事务,则该事务挂起。 
PROPAGATION_NOT_SUPPORTED Spring不会执行事务中的代码。代码总是在非事务环境下执行,如果当期有事务,则该事务挂起。 
PROPAGATION_NEVER 即使当前有事务,Spring也会在飞事务环境下执行。如果当前有事务,则抛出异常。 
PROPAGATION_NESTED 如果当前有事务,则在嵌套事务中执行。如果没有,那么执行情况与PROPAGATION_REQUIRED一样。 

~TransactionStatus 事务具体运行状态


四.Spring事务管理实现

Spring将事务管理分为两类
编程式事务管理
- 手动修改service层的代码,不利于业务扩展(在实际的开发中很少使用)
声明式事务管理
- 基于TransactionProxyFactoryBean (很少使用)
     *需要为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行增强
- aspectJ的XML方式配置(经常使用)
     *xml配置,不需要修改代码
- 使用注解方式进行事务管理(经常使用)
     *配置简单,需要在业务层类上添加一个@Transactional的注解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值