关闭

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

11054人阅读 评论(0) 收藏 举报
分类:

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是设置操作权限为只读,一般用于查询的方法,优化作用.


注解形式:

<context:annotation-config />  
    <context:component-scan base-package="com.bluesky" />  
  
    <tx:annotation-driven transaction-manager="transactionManager"/>  
  
    <bean id="sessionFactory"    
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />    
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />  
    </bean>    
  
    <!-- 定义事务管理器(声明式的事务) -->    
    <bean id="transactionManager"  
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory" />  
    </bean>  
      
</beans>  

package com.bluesky.spring.dao;  
  
import java.util.List;  
  
import org.hibernate.SessionFactory;  
import org.springframework.beans.factory.annotation.Autowired;  
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;  
import org.springframework.stereotype.Component;  
  
import com.bluesky.spring.domain.User;  
  
@Transactional(value = "txManager",propagation=Propagation.REQUIRED,rollbackFor=Exception.class,readOnly=true)
@Component("userDao")  
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {  
  
    public List<User> listUsers() {  
        return this.getSession().createQuery("from User").list();  
    }  
      
      
} 


aop形式:

<context:annotation-config />  
   <context:component-scan base-package="com.bluesky" />  
  
   <bean id="sessionFactory"    
           class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
       <property name="configLocation" value="classpath:hibernate.cfg.xml" />    
       <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />  
   </bean>    
  
   <!-- 定义事务管理器(声明式的事务) -->    
   <bean id="transactionManager"  
       class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
       <property name="sessionFactory" ref="sessionFactory" />  
   </bean>  
  
   <tx:advice id="txAdvice" transaction-manager="transactionManager">  
       <tx:attributes>  
           <tx:method name="*" propagation="REQUIRED" rollback-for="Exception" />  
       </tx:attributes>  
   </tx:advice>  
     
   <aop:config>  
       <aop:pointcut id="interceptorPointCuts"  
           expression="execution(* com.wonders.asset.service..*.*(..))" />
       <aop:advisor advice-ref="txAdvice"  
           pointcut-ref="interceptorPointCuts" />          
   </aop:config>        
</beans>  


共享基类:

<bean id="sessionFactory"    
            class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">    
        <property name="configLocation" value="classpath:hibernate.cfg.xml" />    
        <property name="configurationClass" value="org.hibernate.cfg.AnnotationConfiguration" />  
    </bean>    
  
    <!-- 定义事务管理器(声明式的事务) -->    
    <bean id="transactionManager"  
        class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
        <property name="sessionFactory" ref="sessionFactory" />  
    </bean>  
      
    <bean id="transactionBase"    
            class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"    
            lazy-init="true" abstract="true">    
        <!-- 配置事务管理器 -->    
        <property name="transactionManager" ref="transactionManager" />    
        <!-- 配置事务属性 -->    
        <property name="transactionAttributes">    
            <props>    
                <prop key="*">PROPAGATION_REQUIRED</prop>    
            </props>    
        </property>    
    </bean>      
     
    <!-- 配置DAO -->  
    <bean id="userDaoTarget" class="com.bluesky.spring.dao.UserDaoImpl">  
        <property name="sessionFactory" ref="sessionFactory" />  
    </bean>  
      
    <bean id="userDao" parent="transactionBase" >    
        <property name="target" ref="userDaoTarget" />     
    </bean>  
</beans>


2
0
查看评论

tx有关的设置

有关的设置 这一节里将描述通过  标签来指定不同的事务性设置。默认的  设置如下:   事务传播设置是 REQUIRED 隔离级别是 DEFAULT 事务是 读/写 事务超时默认是依赖于事务系统的,或者事务...
  • u014351782
  • u014351782
  • 2016-03-31 18:28
  • 1480

spring tx:advice事务配置

首先在/WEB-INF/applicationContext.xml添加以下内容: bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransaction...
  • rong_wz
  • rong_wz
  • 2016-12-21 17:27
  • 4721

spring tx标签配置事务的解析过程

昨天遇到个问题,同一事务内,前一步插入成功的记录,后面的查询不到这条记录,折腾了我好久,最后发现自己把工具类放错包了 。 刚好也顺便看了下tx标签配置方式下 事务的解析过程,参考地址: http://michael-softtech.iteye.com/blog/monthblog/2...
  • jin5203344
  • jin5203344
  • 2016-10-25 10:15
  • 3728

Spring的声明式事务管理<tx:advice/> 有关的设置

有关的设置 这一节里将描述通过  标签来指定不同的事务性设置。默认的  设置如下:   事务传播设置是 REQUIRED 隔离级别是 DEFAULT 事务是 读/写 事务超时默认是依赖于事务系统的,或者事务...
  • bao19901210
  • bao19901210
  • 2013-12-09 17:27
  • 17341

<tx:method/> 有关的设置

有关的设置 这一节里将描述通过  标签来指定不同的事务性设置。默认的  设置如下: 事务传播设置是 REQUIRED 隔离级别是 DEFAULT 事务是 读/写 事务超时默认是依赖于...
  • bigtree_3721
  • bigtree_3721
  • 2016-03-12 00:39
  • 1390

<tx:method/> 有关的设置

SPRING中PROPAGATION类的事务属性详解 PROPAGATION_REQUIRED:         支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。  PROPAGATION_SUPPO...
  • mini_jike
  • mini_jike
  • 2015-05-30 15:43
  • 11290

Spring-tx声明式事务、@Transaction注解事务

转载自http://jinnianshilongnian.iteye.com/blog/1442376 9.4  声明式事务 9.4.1  声明式事务概述        从上节编程式实现...
  • fengshenju2018
  • fengshenju2018
  • 2016-01-27 16:22
  • 10492

Spring配置中transactionAttributes的意义

目前公司使用JSF+Spring+JPA的开发框架,先不讨论此框架的优劣,说说早期应用中碰到的问题:在使用spring提供的JpaTemplate进行查询时,如果数据量超过100条,查询效率就会明显降低。由于开始时使用JPA内部的双向关联,造成各实体内部关联过多,从而影响所有的操作,因此怀疑是因为J...
  • cyq1984
  • cyq1984
  • 2009-10-20 23:50
  • 9156

Spring中transactionAttributes的详解

在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。由于开始时使用JPA内部的双向关联,造成各实体内部关联过多,从而影响所有的操作,因此怀疑是因为JPA的关联关系所致。但 是去掉关联关系后的效果不显著。  查找spring的相关配...
  • u013061690
  • u013061690
  • 2014-04-01 10:10
  • 763

Spring事务Transaction配置的五种注入方式详解

Spring事务Transaction配置的五种注入方式详解 http://www.zuidaima.com/share/1828220435860480.htm
  • yaerfeng
  • yaerfeng
  • 2014-06-04 09:53
  • 49093
    个人资料
    • 访问:9387734次
    • 积分:78713
    • 等级:
    • 排名:第21名
    • 原创:264篇
    • 转载:2885篇
    • 译文:3篇
    • 评论:801条
    文章分类