zoukankan      html  css  js  c++  java
  • 事务管理的几种方式

    代码下载地址:http://www.zuidaima.com/share/1828220435860480.htm


    前段时间对spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的。

        总结如下:

        Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。

       DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。

        具体如下图:

    Spring事务配置 (2)

        根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下:

        第一种方式:每个Bean都有一个代理

    [java] view plain copy
     print?
    1. <?xml version="1.0"encoding="UTF-8"?>   
    2.  <beans xmlns="http://www.springframework.org/schema/beans"  
    3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.  xmlns:context="http://www.springframework.org/schema/context"  
    5.  xmlns:aop="http://www.springframework.org/schema/aop"  
    6.  xsi:schemaLocation="http://www.springframework.org/schema/beans  
    7.  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
    8.  http://www.springframework.org/schema/context  
    9.  http://www.springframework.org/schema/context/spring-context-2.5.xsd  
    10.  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">   
    11.   
    12.  <bean id="sessionFactory"   
    13.  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
    14.  <property name="configLocation" value="classpath:hibernate.cfg.xml" />   
    15.  <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />   
    16.  </bean>   
    17.   
    18.  <!-- 定义事务管理器(声明式的事务) -->   
    19.  <bean id="transactionManager"  
    20.  class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    21.  <property name="sessionFactory" ref="sessionFactory" />   
    22.  </bean>   
    23.    
    24.  <!-- 配置DAO -->   
    25.  <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">  
    26.  <property name="sessionFactory" ref="sessionFactory" />   
    27.  </bean>   
    28.    
    29.  <bean id="userDao"   
    30.  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">   
    31.  <!-- 配置事务管理器 -->   
    32.  <property name="transactionManager" ref="transactionManager" />   
    33.  <property name="target" ref="userDaoTarget" />   
    34.  <property name="proxyInterfaces" value="com.bluesky.spring.dao.GeneratorDao" />   
    35.  <!-- 配置事务属性 -->   
    36.  <property name="transactionAttributes">   
    37.  <props>   
    38.  <prop key="*"> PROPAGATION_REQUIRED </prop>   
    39.  </props>   
    40.  </property>   
    41.  </bean>   
    42.  </beans>  

        第二种方式:所有Bean共享一个代理基类

    [java] view plain copy
     print?
    1. <?xml version="1.0"encoding="UTF-8"?>   
    2.  <beans xmlns="http://www.springframework.org/schema/beans"  
    3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.  xmlns:context="http://www.springframework.org/schema/context"  
    5.  xmlns:aop="http://www.springframework.org/schema/aop"  
    6.  xsi:schemaLocation="http://www.springframework.org/schema/beans  
    7.  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
    8.  http://www.springframework.org/schema/context  
    9.  http://www.springframework.org/schema/context/spring-context-2.5.xsd  
    10.  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">   
    11.   
    12.  <bean id="sessionFactory"   
    13.  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
    14.  <property name="configLocation" value="classpath:hibernate.cfg.xml" />   
    15.  <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />   
    16.  </bean>   
    17.   
    18.  <!-- 定义事务管理器(声明式的事务) -->   
    19.  <bean id="transactionManager"  
    20.  class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    21.  <property name="sessionFactory" ref="sessionFactory" />   
    22.  </bean>   
    23.    
    24.  <bean id="transactionBase"   
    25.  class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"   
    26.  lazy-init="true" abstract="true">   
    27.  <!-- 配置事务管理器 -->   
    28.  <property name="transactionManager" ref="transactionManager" />   
    29.  <!-- 配置事务属性 -->   
    30.  <property name="transactionAttributes">   
    31.  <props>   
    32.  <prop key="*">PROPAGATION_REQUIRED </prop>   
    33.  </props>   
    34.  </property>   
    35.  </bean>   
    36.    
    37.  <!-- 配置DAO -->   
    38.  <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">  
    39.  <property name="sessionFactory" ref="sessionFactory" />   
    40.  </bean>   
    41.    
    42.  <bean id="userDao" parent="transactionBase">   
    43.  <property name="target" ref="userDaoTarget" />   
    44.  </bean>   
    45.  </beans>  

    第三种方式:使用拦截器

    [java] view plain copy
     print?
    1. <?xml version="1.0"encoding="UTF-8"?>   
    2.  <beans xmlns="http://www.springframework.org/schema/beans"  
    3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.  xmlns:context="http://www.springframework.org/schema/context"  
    5.  xmlns:aop="http://www.springframework.org/schema/aop"  
    6.  xsi:schemaLocation="http://www.springframework.org/schema/beans  
    7.  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
    8.  http://www.springframework.org/schema/context  
    9.  http://www.springframework.org/schema/context/spring-context-2.5.xsd  
    10.  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">   
    11.   
    12.  <bean id="sessionFactory"   
    13.  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
    14.  <property name="configLocation" value="classpath:hibernate.cfg.xml" />   
    15.  <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />   
    16.  </bean>   
    17.   
    18.  <!-- 定义事务管理器(声明式的事务) -->   
    19.  <bean id="transactionManager"  
    20.  class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    21.  <property name="sessionFactory" ref="sessionFactory" />   
    22.  </bean>   
    23.    
    24.  <bean id="transactionInterceptor"   
    25.  class="org.springframework.transaction.interceptor.TransactionInterceptor">   
    26.  <property name="transactionManager" ref="transactionManager" />   
    27.  <!-- 配置事务属性 -->   
    28.  <property name="transactionAttributes">   
    29.  <props>   
    30.  <prop key="*">PROPAGATION_REQUIRED </prop>   
    31.  </props>   
    32.  </property>   
    33.  </bean>   
    34.    
    35.  <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">   
    36.  <property name="beanNames">   
    37.  <list>   
    38.  <value> *Dao </value>   
    39.  </list>   
    40.  </property>   
    41.  <property name="interceptorNames">   
    42.  <list>   
    43.  <value> transactionInterceptor </value>   
    44.  </list>   
    45.  </property>   
    46.  </bean>   
    47.    
    48.  <!-- 配置DAO -->   
    49.  <bean id="userDao" class="com.bluesky.spring.dao.UserDaoImpl">  
    50.  <property name="sessionFactory" ref="sessionFactory" />   
    51.  </bean>   
    52.  </beans>  

    第四种方式:使用tx标签配置的拦截器

    [java] view plain copy
     print?
    1. <?xml version="1.0"encoding="UTF-8"?>   
    2.  <beans xmlns="http://www.springframework.org/schema/beans"  
    3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.  xmlns:context="http://www.springframework.org/schema/context"  
    5.  xmlns:aop="http://www.springframework.org/schema/aop"  
    6.  xmlns:tx="http://www.springframework.org/schema/tx"  
    7.  xsi:schemaLocation="http://www.springframework.org/schema/beans  
    8.  http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
    9.  http://www.springframework.org/schema/context  
    10.  http://www.springframework.org/schema/context/spring-context-2.5.xsd  
    11.  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  
    12.  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">   
    13.   
    14.  <context:annotation-config />   
    15.  <context:component-scan base-package="com.bluesky" />   
    16.   
    17.  <bean id="sessionFactory"   
    18.  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
    19.  <property name="configLocation" value="classpath:hibernate.cfg.xml" />   
    20.  <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />   
    21.  </bean>   
    22.   
    23.  <!-- 定义事务管理器(声明式的事务) -->   
    24.  <bean id="transactionManager"  
    25.  class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
    26.  <property name="sessionFactory" ref="sessionFactory" />   
    27.  </bean>   
    28.   
    29.  <tx:advice id="txAdvice" transaction-manager="transactionManager">  
    30.  <tx:attributes>   
    31.  <tx:method name="*" propagation="REQUIRED" />   
    32.  </tx:attributes>   
    33.  </tx:advice>   
    34.    
    35.  <aop:config>   
    36.  <aop:pointcut id="interceptorPointCuts"  
    37.  expression="execution(*com.bluesky.spring.dao.*.*(..))" />   
    38.  <aop:advisor advice-ref="txAdvice"  
    39.  pointcut-ref="interceptorPointCuts" />   
    40.  </aop:config>   
    41.  </beans>  

    第五种方式:全注解

    学习、成长
  • 相关阅读:
    一个前端的博客
    win10安装redis
    RabbitMQ的基本使用
    SpringMVC 中 @ControllerAdvice 注解的三种使用场景
    在Spring cloud中使用Spring Cloud Alibaba Nacos Discovery报错
    MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”。
    asp.net自定义错误信息处理
    MVC返回值详解
    C#集合
    C#linq查询方法使用简介
  • 原文地址:https://www.cnblogs.com/yarcl/p/11046782.html
Copyright © 2011-2022 走看看