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


    转自:https://blog.csdn.net/z69183787/article/details/17161393

    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=></prop>  

     

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

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

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

    readonly :

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


    注解形式:

     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>  
     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形式:

     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>  

    共享基类:

     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>
  • 相关阅读:
    is running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.6 GB of 40 GB virtual memory used
    saiku执行速度优化二
    saiku执行速度慢
    saiku 升级&备份&恢复
    saiku 展示优化第二步(要诀和技巧)
    saiku 无密码登陆
    saiku 展示优化
    saiku源代码安装
    结合使用saiku、mondrian workbentch建立多维查询报表
    浅析 mondrian 模式文件 Schema
  • 原文地址:https://www.cnblogs.com/sharpest/p/7681347.html
Copyright © 2020-2023  润新知