关于SpringMvc中的事务@Transactional

来源:互联网 发布:历史大事年表知乎 编辑:程序博客网 时间:2024/06/02 04:44
情景:
     SpringMVC   Dubbo 远程调用 业务层
     在业务层Facade实现类中   用Dubbo 远程调用 业务层  事务不回滚

     如下:
           
     @Override
      @Transactional(rollbackFor=Exception.class)
      publicbooleanreceAward(LonguserId)throwsBusinessException {
           
                  /**
                   * 当这个方法抛出异常  其他操作都会回滚  唯独下面领接口不会回滚 为什么呢?
                   */
                   //操作1
                  issuccess=couponFacade.gradRed****(参数)
                  //测试1  //操作2
                  CpsCouponTyperecord=newCpsCouponType();
                  record.setId(1L);
                  record.setDesc("测试事务是否回滚此操作");
                  couponService.updateCpsCouponType(record);
                  
                  //测试2   //操作3
                  test();
            
        
            //领奖了记录一下   //操作4
            CpsActiveSignAwardcpsAward=newCpsActiveSignAward();
            cpsAward.setSignconfId(vo.get(0).getId());
            cpsAward.setRecordId(cpsActiveVo.getId());
            cpsAward.setUserId(userId);
            lotteryService.insertCpsActiveSignAward(cpsAward);
            
            //操作5
            CpsActiveSignRecordins=newCpsActiveSignRecord();
            ins.setLastDaydate(newDate());
            ins.setUserId(userId);
            ins.setDayNum(cpsActiveVo.getDayNum()+1);
            ins.setId(cpsActiveVo.getId());
            lotteryService.update(ins);
            inti= 1/0;   //这里故意抛异常
            returnissuccess;
      }

      //这个测试  也是放着本 业务层里面  
      @Override
      publicvoidtest() {
            
            CpsActiveSignRecordins=newCpsActiveSignRecord();
            ins.setDayNum(111);
            ins.setId(1);
            lotteryService.update(ins);
      }



上面是我写的一些测试情况;
经过运行发现  所有的事务都回滚了  只有操作1没有回滚;

猜想:由于操作1  是通过dubbo远程调用的方法;  消息已经发出去了;操作已经执行成功了;然后当前业务层 所有的操作的事务还没有提交  所以能够回滚;  恩,应该是这样 哈哈哈哈



解决方案:
  将  这个 方法   couponFacade.gradRed****(参数) 的实现   放到了 couponService  业务层中
然后在这里直接调用couponService.gradRed****(参数);这样子就可以了


0 0