首页 > 代码库 > spring的事务控制

spring的事务控制

1.事务介绍

(1)特性:ACID

Atomicity(原子性):事务中的所有操作要么全做要么全不做

Consistency(一致性):事务执行的结果使得数据库从一个一致性状态转移到另一个一致性状态

Isolation(隔离性):一个事务的执行不受其他事务的干扰

Durability(永久性):一个事务一旦提交,对数据库的影响是永久性的

 

(2)事务并发问题

技术分享

(3)       隔离级别

技术分享

技术分享

 

2.  Spring封装了事务管理操作

1.事务操作

打开事务  回滚事务   提交事务

2.事务操作对象

因为在不同平台,操作事务的代码各不相同.spring提供了一个接口

(1)PlatformTransactionManager 接口

技术分享

(2)spring管理事务的属性介绍

 事务隔离级别:  1读未提交

                                2 读已提交

                                4 可重复读

                                8 串行化

 是否只读   true 只读

                             False 可操作

 事务的传播行为

技术分享

 

3.Spring管理事务的三种方式

1.  XML配置(aop)

1.  导包

Aop  aspect   aop联盟  weaver(织入包)

技术分享

2.导入新的约束(tx)

技术分享

beans: 最基本

context:读取properties配置

aop:配置aop

tx:配置事务通知

3.配置通知

技术分享

4.配置将通知织入目标对象

 

技术分享

 

 

 

注意:  可以将通知织入多个目标对象,也就是可以对多个不同路径的serviceImpl进行事务控制。配置方式是再开一个aop进行配置

技术分享

 

 

5.例如:

包结构:

技术分享

配置事务的代码

<!-- 事务模板对象,依赖于事务核心管理器 -->    <bean name="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">        <property name="transactionManager" ref="transactionManager"></property>    </bean>        <!-- ················开始使用XML管理事务························  -->     <!--  配置事务通知(无论哪种方式都要用到事务的核心管理器)-->    <tx:advice transaction-manager="transactionManager" id="firstTx">        <tx:attributes>            <!--以方法为单位,指定方法应用事务什么属性             isolation:隔离级别             read-only:只读属性             propagation:传播行为             -->             <!-- 企业中运用通配符命名规则。两套增删改查(8种) -->            <tx:method name="save*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>            <tx:method name="persist*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>            <tx:method name="delete*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>            <tx:method name="remove*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>            <tx:method name="update*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>            <tx:method name="modify*" isolation="DEFAULT" read-only="false" propagation="REQUIRED"/>            <tx:method name="get*" isolation="DEFAULT" read-only="true" propagation="REQUIRED"/>            <tx:method name="find*" isolation="DEFAULT" read-only="true" propagation="REQUIRED"/>        </tx:attributes>    </tx:advice>        <!-- 配置织入 -->    <aop:config>        <!-- 配置切点表达式 -->        <aop:pointcut expression="execution(* cn.xm.exam.service.*.*.*ServiceImpl.*(..))" id="texPc"/>        <!-- 配置切面:切点+通知        advice-ref:通知名称        pointcut-ref:切点名称         -->        <aop:advisor advice-ref="firstTx" pointcut-ref="texPc"/>    </aop:config>

 

spring的事务控制