关于SpringMvc中的事务@Transactional

情景:
     SpringMVC   Dubbo 远程调用 业务层
     在业务层Facade实现类中   用Dubbo 远程调用 业务层  事务不回滚

     如下:
           
     @Override
       @Transactional (rollbackFor=Exception. class )
       public boolean receAward(Long userId ) throws BusinessException {
           
                   /**
                   * 当这个方法抛出异常  其他操作都会回滚  唯独下面领接口不会回滚 为什么呢?
                   */
                   //操作1
                   issuccess = couponFacade .gradRed****(参数)
                   //测试1   //操作2
                  CpsCouponType record = new CpsCouponType();
                   record .setId(1L);
                   record .setDesc( "测试事务是否回滚此操作" );
                   couponService .updateCpsCouponType( record );
                  
                   //测试2    //操作3
                  test();
            
        
             //领奖了记录一下    //操作4
            CpsActiveSignAward cpsAward = new CpsActiveSignAward();
             cpsAward .setSignconfId( vo .get(0).getId());
             cpsAward .setRecordId( cpsActiveVo .getId());
             cpsAward .setUserId( userId );
             lotteryService .insertCpsActiveSignAward( cpsAward );
            
             //操作5
            CpsActiveSignRecord ins = new CpsActiveSignRecord();
             ins .setLastDaydate( new Date());
             ins .setUserId( userId );
             ins .setDayNum( cpsActiveVo .getDayNum()+1);
             ins .setId( cpsActiveVo .getId());
             lotteryService .update( ins );
             int i = 1/0;   //这里故意抛异常
             return issuccess ;
      }

      //这个测试  也是放着本 业务层里面  
       @Override
       public void test() {
            
            CpsActiveSignRecord ins = new CpsActiveSignRecord();
             ins .setDayNum(111);
             ins .setId(1);
             lotteryService .update( ins );
      }



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

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



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


  • 13
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石臻臻的杂货铺

不用打赏,加微信,交个朋友就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值