Spring的事务不回滚处理

来源:互联网 发布:淘宝联名精英版白金卡 编辑:程序博客网 时间:2024/04/30 19:44

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


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

[java] view plaincopy
  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 plaincopy
  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>