各位大神 
现在有一个需求class AService { public void ma(){]
  mb();
  mc();
  mb();
  mc();
 }
 private void mb(){}
 private void mc(){}
}需要:mb 和 mc 单独提交或回滚 互不影响  mb 或mc 要单独执行多次这个该怎么配置spring

解决方案 »

  1.   

    这此方法都在一个service 中 
    要求每执行一次mb 或 mc 都要单独提交或回滚一次 
    大神们 怎么配啊  先谢谢了 
      

  2.   

    设置AOP
    <tx:method name="add*" propagation="REQUIRED" />expression="execution(public * com.xxx.controller.*.*(..))" />
    限制哪些方法加入事务回滚
      

  3.   

    ------------------------------------------
    不行啊 因为我这些方法都在service 中 我在 ma()方法中 加了catch了 ma中不会向外抛异常,
    public void ma(){]
      mb();   1
      mc();   2
      mb();   3
      mc();   4
     }
    就算  1 处执行失败  那 1 处回滚 ,
    然后再执行  2处。 就是说每一个方法的执行结果都不影响其它方法,不能在 ma 向外抛异常 
      

  4.   

    <tx:advice id="txAdvice" transaction-manager="transactionManager">
           <tx:attributes>
                <tx:method name="save*" propagation="REQUIRES_NEW" />
           </tx:attributes>
    </tx:advice>
    <aop:config>
           <aop:pointcut id="interceptorPointCuts" expression="execution(public * com.test.service.*.*(..))" />
           <aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
    </aop:config>
    ----------------------------------------------------------------------------------
    @Service
    public class TestServiceImpl implements ITestService {    @Resource
        private ITestDao routeDao;    @Override
        public boolean load() {
             for (int i = 0 ;i < 10 ;i ++){
                 try {
                      saveA();
                      } catch (Exception e) {
                           e.printStackTrace();
              }
              }
         }     @Override
         public void saveA() {
              routeDao.saveA();
         }
    }
    -------------------------------------------------------------------------
    各位大神 看一下我的代码 问题出在什么地方?让saveA(); 单个能提交或回滚
      

  5.   


    你既然使用了Spring的事务管理就不要再用Try-catch了;
    在Spring中如果业务方法被try-catch包起来,则这个业务方法就脱离了Spring事务的管理,为什么?
    因为用了try-catch就不会有任何异常从业务方法中抛出,而是被自身捕获并吞掉了,导至Spring异常抛出触发事务回滚策略失效!
      

  6.   

    去掉try catch 不然框架认不了的。
      

  7.   

    那意思就是说 我这个循环处理的业务 不能放在service中处理 只能在action层处理? 
    因为这是业务逻辑的部分  我不想放在action层中做 for (int i = 0 ;i < 10 ;i ++){
                 try {
                      saveA();
                  } catch (Exception e) {
                           e.printStackTrace();
                  }
     }再有没有更好办法解决呢?先谢谢上面回答的几位大神