Spring的事务不回滚处理

Spring的事务回滚,当且仅当捕获到RuntimeException类型异常时,才会回滚,对普通Exception异常无效。


以下是我Service层捕获异常,并抛出RuntimeException异常到Action层:

[java]  view plain copy
  1.        @Override  
  2. public void lock(String id) throws RuntimeException {  
  3.     try {  
  4.         this.loginUserDao.lock(id);  
  5.         LoginUser user = this.loginUserDao.findById(id);  
  6.         user.setSex("捕捉到异常后,抛出RuntimeException类型的异常");  
  7.         this.loginUserDao.save(user);  
  8.     } catch (Exception e) {  
  9.         // 捕捉到异常后,抛出RuntimeException类型的异常。  
  10.         // spring 事务只在捕足到RuntimeException异常时,才会回滚,对Exception无效  
  11.         throw new RuntimeException(e.getMessage());  
  12.     }  
  13. }  




spring中事务管理配置:

[html]  view plain copy
  1. <!-- 为sessionFactory定义事务管理器 -->  
  2. <bean id="transactionManager"  
  3.     class="org.springframework.orm.hibernate3.HibernateTransactionManager">  
  4.     <property name="sessionFactory">  
  5.         <ref local="sessionFactory" />  
  6.     </property>  
  7. </bean>  
  8.   
  9. <!-- 定义事务拦截器 -->  
  10. <bean id="transactionInterceptor"  
  11.     class="org.springframework.transaction.interceptor.TransactionInterceptor">  
  12.     <!-- 为事务拦截器注入一个事务管理器 -->  
  13.     <property name="transactionManager" ref="transactionManager" />  
  14.     <property name="transactionAttributes">  
  15.         <!-- 定义事务传播属性 PROPAGATION_REQUIRED:表示如果事务不存在,则创建一个新事务,如果存在,则加入到该事务。 -->  
  16.         <props>  
  17.             <prop key="save*">PROPAGATION_REQUIRED</prop>  
  18.             <prop key="add*">PROPAGATION_REQUIRED</prop>  
  19.             <prop key="delete*">PROPAGATION_REQUIRED</prop>  
  20.             <prop key="update*">PROPAGATION_REQUIRED</prop>  
  21.             <prop key="lock*">PROPAGATION_REQUIRED</prop>  
  22.             <prop key="unLock*">PROPAGATION_REQUIRED</prop>  
  23.             <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>  
  24.             <prop key="list*">PROPAGATION_REQUIRED,readOnly</prop>  
  25.             <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>  
  26.             <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>  
  27.         </props>  
  28.     </property>  
  29. </bean>  
  30. <!-- 定义拦截器要拦截的bean -->  
  31. <bean id="autoProxy"  
  32.     class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">  
  33.     <property name="beanNames">  
  34.         <list>  
  35.             <!-- 拦截所有名字以Service结尾的bean进行代理 -->  
  36.             <value>*Service</value>  
  37.         </list>  
  38.     </property>  
  39.     <property name="interceptorNames">  
  40.         <list>  
  41.             <value>transactionInterceptor</value>  
  42.         </list>  
  43.     </property>  
  44. </bean>  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值