Spring配置事务中的 transactionAttributes 各属性含义

transactionAttributes 属性:

PROPAGATION

 

事务传播行为类型

说明

PROPAGATION_REQUIRED

如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS

支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY

使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW

新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED

以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER

以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。

 

 

 

Exception:(注解用 rollback-for) 定义当遇到Exception异常 时 回滚。

  1. <prop key="save*">PROPAGATION_REQUIRED,-ApplicationException,+BusinessException</prop>  

 

- 表示抛出该异常时需要回滚

+表示即使抛出该异常事务同样要提交

-ApplicationException :表示抛出ApplicationException 时,事务需要回滚。但不是说只抛出ApplicationException 异常时,事务才回滚,如果程序抛出RuntimeException和Error时,事务一样会回滚,即使这里没有配置。因为Spring中默认对所有的RuntimeException和Error都会回滚事务

 

readonly :

readonly是设置操作权限为只读,一般用于查询的方法,优化作用.

 

注解形式:

 

[html]  view plain copy 在CODE上查看代码片
 
  1. <context:annotation-config />    
  2.     <context:component-scan base-package="com.bluesky" />    
  3.     
  4.     <tx:annotation-driven transaction-manager="transactionManager"/>    
  5.     
  6.     <bean id="sessionFactory"      
  7.             class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">      
  8.         <property name="configLocation" value="classpath:hibernate.cfg.xml" />      
  9.         <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />    
  10.     </bean>      
  11.     
  12.     <!-- 定义事务管理器(声明式的事务) -->      
  13.     <bean id="transactionManager"    
  14.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">    
  15.         <property name="sessionFactory" ref="sessionFactory" />    
  16.     </bean>    
  17.         
  18. </beans>    

 

[java]  view plain copy 在CODE上查看代码片
 
  1. package com.bluesky.spring.dao;    
  2.     
  3. import java.util.List;    
  4.     
  5. import org.hibernate.SessionFactory;    
  6. import org.springframework.beans.factory.annotation.Autowired;    
  7. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;    
  8. import org.springframework.stereotype.Component;    
  9.     
  10. import com.bluesky.spring.domain.User;    
  11.     
  12. @Transactional(value = "txManager",propagation=Propagation.REQUIRED,rollbackFor=Exception.class,readOnly=true)  
  13. @Component("userDao")    
  14. public class UserDaoImpl extends HibernateDaoSupport implements UserDao {    
  15.     
  16.     public List<User> listUsers() {    
  17.         return this.getSession().createQuery("from User").list();    
  18.     }    
  19.         
  20.         
  21. }   



 

aop形式:

 

[html]  view plain copy 在CODE上查看代码片
 
  1. <context:annotation-config />    
  2.    <context:component-scan base-package="com.bluesky" />    
  3.     
  4.    <bean id="sessionFactory"      
  5.            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">      
  6.        <property name="configLocation" value="classpath:hibernate.cfg.xml" />      
  7.        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />    
  8.    </bean>      
  9.     
  10.    <!-- 定义事务管理器(声明式的事务) -->      
  11.    <bean id="transactionManager"    
  12.        class="org.springframework.orm.hibernate3.HibernateTransactionManager">    
  13.        <property name="sessionFactory" ref="sessionFactory" />    
  14.    </bean>    
  15.     
  16.    <tx:advice id="txAdvice" transaction-manager="transactionManager">    
  17.        <tx:attributes>    
  18.            <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />    
  19.        </tx:attributes>    
  20.    </tx:advice>    
  21.        
  22.    <aop:config>    
  23.        <aop:pointcut id="interceptorPointCuts"    
  24.            expression="execution(* com.wonders.asset.service..*.*(..))" />  
  25.        <aop:advisor advice-ref="txAdvice"    
  26.            pointcut-ref="interceptorPointCuts" />            
  27.    </aop:config>          
  28. </beans>    



 

共享基类:

 

[html]  view plain copy 在CODE上查看代码片
 
  1. <bean id="sessionFactory"      
  2.             class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">      
  3.         <property name="configLocation" value="classpath:hibernate.cfg.xml" />      
  4.         <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />    
  5.     </bean>      
  6.     
  7.     <!-- 定义事务管理器(声明式的事务) -->      
  8.     <bean id="transactionManager"    
  9.         class="org.springframework.orm.hibernate3.HibernateTransactionManager">    
  10.         <property name="sessionFactory" ref="sessionFactory" />    
  11.     </bean>    
  12.         
  13.     <bean id="transactionBase"      
  14.             class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"      
  15.             lazy-init="true" abstract="true">      
  16.         <!-- 配置事务管理器 -->      
  17.         <property name="transactionManager" ref="transactionManager" />      
  18.         <!-- 配置事务属性 -->      
  19.         <property name="transactionAttributes">      
  20.             <props>      
  21.                 <prop key="*">PROPAGATION_REQUIRED</prop>      
  22.             </props>      
  23.         </property>      
  24.     </bean>        
  25.        
  26.     <!-- 配置DAO -->    
  27.     <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">    
  28.         <property name="sessionFactory" ref="sessionFactory" />    
  29.     </bean>    
  30.         
  31.     <bean id="userDao" parent="transactionBase" >      
  32.         <property name="target" ref="userDaoTarget" />       
  33.     </bean>    
  34. </beans>  

你可能感兴趣的:(transaction)