seata手动回滚之后为什么还会触发TransactionalTemplate提交?

 手动回滚是正常的,但是在最后return错误信息的时候,还是会触发commitTransaction方法,由于手动回滚了,所以是Finished状态,导致控制台报错:

Global transaction[%s] not found, may be rollbacked.

但是我的自定义信息就无法返回了,前台只能接到Internal Server Error。

手动回滚注释掉倒是正常返回自定义信息,但是没法回滚。。。

  @Override
  @GlobalTransactional(name = "global-create-order", rollbackFor = Exception.class)
  public ResultData createOrder(Order order) {
    Integer result = orderMapper.insert(order);

    if (result > 0) {
      ResultData stoResultData = storageApi.decrease(order.getProductId(), order.getCount());
      ResultData accResultData = accountFeign.decrease(order.getUserId(), order.getMoney());

      // 全局事务未如期完成,手动回滚,并返回自定义错误信息
      if (!Objects.equals(accResultData.getCode(), "200") || !Objects.equals(
          stoResultData.getCode(), "200")) {
        log.error("stoResultData:{}",stoResultData.getMessage());
        log.error("accResultData:{}",accResultData.getMessage());

        try {
          
          // 在这里手动回滚
          GlobalTransactionContext.reload(RootContext.getXID()).rollback();
        } catch (TransactionException e) {
          throw new RuntimeException(e);
        }
      } else {
        order.setStatus(1);
        orderMapper.updateById(order);
        return ResultData.success(order);
      }
    }

    // 返回自定义信息
    return ResultData.fail(ReturnCodeEnum.RC999.getCode(), ReturnCodeEnum.RC999.getMessage());
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值