Spring框架事务的开启

Posted 18岁程序员想当歌手

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring框架事务的开启相关的知识,希望对你有一定的参考价值。

一、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"/>

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

  @Transactional     

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

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

 

以上是关于Spring框架事务的开启的主要内容,如果未能解决你的问题,请参考以下文章

一Spring事务开启原理

spring事务管理器

Spring事务,Bean生命周期

SSH框架的基本整合

我在spring设置了事务管理,但是对于需要使用事务的方法,如果不手动开启事务,这个方法根本不执行

spring事务的开启方式(编程式和声明式)