Spring声明式事务
* 事务回顾
- 一个事务中包含多个操作,要么所有操作都成功,要么所有操作都失败,不允许单独一个操作成功或失败。
- 事务在项目开发中十分重要,涉及到数据的一致性问题(ACID)
- ACID : 原子性 一致性 隔离性 持久性
* Spring中的事务分为 编程式事务 和 声明式事务
- 声明式事务代码是通过AOP 横切进去的不影响原来的代码
- 编程式事务需要在代码中进行事务的管理,通过try catch进行实现。 transactionManager.commit()
* 声明式事务的配置流程 结合AOP实现事务的织入
- 需要先引入配置文件
xmlns:tx="http://www.springframework.org/schema/tx"
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
- 第一步: 配置声明式事务
<!--配置声明式事务-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg 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="query" read-only="true"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
- 第三步: 配置事务的切入
<!--配置事务切入位置-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.shi.mapper.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut"/>
</aop:config>