首页 > 代码库 > Spring事务_1

Spring事务_1

事务:指逻辑上一组操作,这组操作要么全部成功,要么全部失败。

事务的特性:

1 原子性:食物是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。

2 一致性:事务执行前后数据的完整性必须保持一致

3 隔离性 :多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干烧,多个并发事务之间数据要相互隔离。

4 持久性:一个事务一旦被提交,它对数据库的中的数据的改变就是永久性的,及时数据库发生故障也不会有影响。

===============================================================

3-1 Spring接口介绍
·Spring事务管理高层抽象主要包括3个接口
·PlatformTransactionManager事务管理器
·TransactionDefinition事务定义信息(隔离,传播,超时,只读)
·TransactionStatus事务具体运行状态

---3-2 PlatformTransactionManager接口介绍--------------------------------------------------------------------------------------------------------------

·PlatformTransactionManager事务管理器

Spring为不同的持久化框架提供了不同的PlatformTransactionManager接口实现

org.springframework.jdbc.datasource.DataSourceTransactionManager 使用Spring JDBC或IBatis进行持久化数据时使用
org.springframework.orm.hibernate3.HibernateTransactionManager    使用Hibernate3.0版本进行持久化数据时使用
org.springframework.orm.jpa.JpaTransactionManager     使用JPA进行持久化数据时使用
org.springframework.jdo.JdoTransactionManager      当持久化机制是Jdo时使用
org.springframework.transaction.jta.JtaTransactionManager  使用一个JTA实现来管理事务,在一个事务跨越多个资源时必须使用

---3-3 TransactionDefinition定义事务隔离级别--------------------------------------------------------------------------------------------------------------

TransactionDefinition定义事务隔离级别

不考虑隔离性,会引发安全问题如下:
脏读,不可重复读,幻读
脏读:一个事务读取了另一个事务改写但是还未提交的数据,如果这些数据被回滚,则读到的数据时无效的。
不可重复读:在同一个事务中,多次读取同一数据返回的结果有所不同
幻读(虚读):一个事务读取了几行记录后,另一个事务插入一些记录幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。

事务隔离级别TransactionDefinition.ISOLATION_

DEFAULT        :  默认隔离级别(对大多数数据库来说就是ISOLATION_ READ_COMMITTED(Oracle),Mysql采用REPEATABLE_READ)
READ_UNCOMMITTED  :  最低的隔离级别。(可能防止脏读,但不可重复读,幻读可发生)事实上我们不应该称其为隔离级别,因为在事务完成前,其他事务可以看到该事务所修改的数据。而在其他事务提交前,该事务也可以看到其他事务所做的修改
READ_COMMITTED  :  大多数数据库的默认级别。在事务完成前,其他事务无法看到该事务所修改的数据。遗憾的是,在该事务提交后,你就可以查看其他事务插入或更新的数据。这意味
着在事务的不同点上,如果其他事务修改了数据,你就会看到不同的数据
REPEATABLE_READ    :  比ISOLATION_READ_COMMITTED更严格,该隔离级别确保如果在事务中查询了某个数据集,你至少还能再次查询到相同的数
据集,即使其他事务修改了所查询的数据。(对相同字段多次读取时一致的,除非数据被事务本身改变。可防止脏读,不可重复读,但幻读仍可发生)然而如果其他事务插入了新数据,你就可以查询到该新插入的数据
SERIALIZABLE  :  (完全服从ACID的隔离级别,确保不发生脏读,不可重复读,幻读)代价最大、可靠性最高的隔离级别,所有的事务都是按顺序一个接一个地执行。

 

---3-3 TransactionDefinition定义事务传播行为--------------------------------------------------------------------------------------------------------------

---3-4 --------------------------------------------------------------------------------------------------------------

---3-4 --------------------------------------------------------------------------------------------------------------

 

---3-4 --------------------------------------------------------------------------------------------------------------

 

---3-4 --------------------------------------------------------------------------------------------------------------

 

Spring事务_1