Spring:(九)声明式事物
一、事物
事物:保证数据的一致性和完整性
事物就是把一系列的动作当做一个独立的工作单元,这些动作要么全部完成,要么都不起作用
-
特性
原子性,一致性,隔离性,持久性
二、事物管理
Spring在不同的事务管理API之上定义了一个抽象层,使得开发人员不必了解底层的事务管理API就可以使用Spring的事务管理机制,Spring支持编程式事务管理和声明式的事务管理
-
编程式事务管理
- 将事务管理代码嵌到业务方法中来控制事务的提交和回滚
- 缺点:必须在每个事务操作业务逻辑中包含额外的事务管理代码
-
声明式事务管理
- 一般情况下比编程式事务好用。
- 将事务管理代码从业务方法中分离出来,以声明的方式来实现事务管理。
- 将事务管理作为横切关注点,通过aop方法模块化。Spring中通过Spring AOP框架支持声明式事务管理。
- -事物管理接口
- PlatformTransactionManager: (平台)事务管理器
- TransactionDefinition: 事务定义信息(事务隔离级别、传播行为、超时、只读、回滚规则)
- TransactionStatus: 事务运行状态
-
- 脏读:一个事物正在修改数据,还没有提交至数据库,另外一个事物访问此数据,进行操作,另外一个事物读到的就是“脏数据”
- 丢失修改:一个事物修改数据,另外一个事物也修改数据,那么第一个事物的操作将丢失
- 不可重复读:一个事物多次读取同一个数据,另外一个事物修改数据,这样导致事物一两次读取的数据不一样
- 幻读:一个事物多次读取数据,另外一个事物添加数据,事物一发现多了原本不存在的元素,仿佛发生了幻觉
三、使用
使用Spring管理事务,注意头文件的约束导入 : tx
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
- 配置事务管理器
- 无论使用Spring的哪种事务管理策略(编程式或者声明式)事务管理器都是必须的。
- 就是 Spring的核心事务管理抽象,管理封装了一组独立于技术的方法。
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
-
配置事物通知
<!--配置事务通知--> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <!--配置哪些方法使用什么样的事务,配置事务的传播特性--> <tx:method name="add" propagation="REQUIRED"/> <tx:method name="delete" propagation="REQUIRED"/> <tx:method name="update" propagation="REQUIRED"/> <tx:method name="search*" propagation="REQUIRED"/> <tx:method name="get" read-only="true"/> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice>