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>

 

转载于:https://www.cnblogs.com/sharpest/p/7681347.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值