配置Spring框架声明式事务管理
事务描述
把一组业务当成一个业务来做,要么都成功,要么都失败
事务在项目开发中十分重要,涉及到数据的一致性问题!
事务ACID原则:
原子性 atomicity :事务是一个整体,必须一起完成,不能只执行一部分
一致性 consistency :一个事务执行前后,数据库都必须处于一致状态,即某些未完成的事务不能写入数据库,否则数据库会不一致。
隔离性 isolation :并发的事务相互隔离,一个事务执行时不被其他事务干扰
脏读:一个事务读取了另一个事务还未提交的数据
非重复读:在一个事务内读取表中的某一行数据,但多次读取的结果不同
幻读:在一个事务内读取到其他事务插入的数据,导致前后读取不一致
持久性 durability :事务一旦提交,数据一定会被写入数据库,无论系统发生声明问题。
举例声明:
一组动作中添加用户、删除用户、查询用户,但删除用户出现错误,所以不应该写入数据库,而由于没有配置事务,虽然最后报错了,不过添加用户依然成功执行,这样是不符合开发要求的
**
Spring中写事务有两种方式,但主要还是横向切入,通过AOP的方式写事务,这样可以不用改变原有代码。
**
一配置事务管理器
<!--配置事务管理器 ref 为数据源-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="datasource" />
</bean>
二结合aop 实现事务的织入
1.配置事务通知
<tx:advice id=" txAdvice" transaction-manager="transactionManager">
<!--给事务配置指定的方法-->
<!--配置事务的传播特性:propagation 传播特性默认为REQUIRED-->
<tx:attributes>
<tx:method name="add" propagation="REQUIRED"/>
<tx:method name="delete"/>
<tx:method name="update"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
配置事务切入点
<!--配置事务切入-->
<aop:config>
<aop:pointcut id="txPointCut" expression="execution(* com.lzp.dao.*.*(..))"/>
<aop:advisor advice-ref=" txAdvice" pointcut-ref="txPointCut"/>
</aop:config>