码迷,mamicode.com
首页 > 编程语言 > 详细

Spring框架事务的开启

时间:2020-03-23 17:00:13      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:upd   数据库事务   red   res   pre   lse   开头   允许   nbsp   

一、Spring中事务的隔离级别

技术图片
  此处涉及到数据库事务的四大特征:ACID---隔离性引发的问题 ;
        MySQL默认隔离级别是:REPEATABLE_READ
 
二、Spring中事务的传播行为
  技术图片
  可以分为三类:        
     1、PROPAGATION_REQUIRED(默认类型)、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY    属于:支持当前事务。如:A调用B,如果A事务存在,B和A处于同一个事务事务默认传播行为是:REQUIRED;        
     2、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER    属于:不会执行原来的事务。如:A调用B,如果A事务存在,B肯定不会和A处于同一个事务;        
     3、PROPAGATION_NESTED    属于:嵌套事务,只对DataSourceTransactionManger起效,底层使用JDBC的SavePoint机制,允许在同一个事务设置保存点,回滚保存点。        
     用户管理事务,需要先配置TransactionDefinition(事务定义信息,事务的管理方案),然后根据需要先配置TransactionDefinition,通过TransactionManager(事务管理器)进行事务管理,事务运行过程中,每个时刻都可以通过TransactionStatus(事务状态)来了解事务的运行状态。
 
三、Spring中事务的具体配置方法
  1、利用XML+aop的配置方式      
    该方式方便将事务进行统一管理
    
<!-- 配置事务 -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"></property>

</bean>

 

<!-- 定义事务的传播行为 -->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<!-- 所有以update delete save开头的方法都进行事务管理 -->

<tx:method name="update*" propagation="REQUIRED"/>

<tx:method name="delete*"/>

<tx:method name="save*"/>

<!-- 查询不做事务处理 -->

<tx:method name="find*" read-only="true"/>

<tx:method name="get*" read-only="true"/>

<tx:method name="select*" read-only="true"/>

</tx:attributes>

</tx:advice>

<!-- 定义切面 -->

<aop:config>

<aop:pointcut expression="execution(* org.service.*.*(..))" id="myPointcut"/>

<aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>

</aop:config>

  2、XML+注解的方式

<!-- 事务管理器 -->

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource"></property>

</bean>

<!-- 使用事务注解@Transational来给具体的方法添加事务要求,缺点是不能统一处理,使用tx:advice方式来进行aop处理则可以统一处理事务 -->

<tx:annotation-driven transaction-manager="transactionManager"/>

2.2  在需要事务处理的类中添加注解

  @Transactional     

    params: readOnly,是否只读,true为只读,false为非只读;     

    params: propagation,设定事务的传播行为

 

Spring框架事务的开启

标签:upd   数据库事务   red   res   pre   lse   开头   允许   nbsp   

原文地址:https://www.cnblogs.com/709539062rao/p/12552957.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!