记录一次由事务可重复读引起的问题

原由是现金贷在下单时为了让订单创建的事务时间尽可能小在插入订单后单独起一个线程去机审,结果在机审中根据这个新订单号却查不到这个订单报订单不存在,原先以为是因为创建订单的事务还没提交就去查所以查不到,所以在机审的代码里写了个循环去查,中途sleep 2s。代码如下:

            orderMapper.insertSelective(order);

            // 插入订单扩展认证信息
            orderMapper.insertOrderExtendAuth(request, order.getId(), user.getId(), request.getHeader().getIp(),
                    request.getHeader().getDeviceType());

            // 更新用户单数
            userMapper.updateOrderCount(user.getId(), order.getId());

// 判断当前用户认证状态 如果已认证 则直接机审 否则跳过进入待机审
            if (info.getCrawlStatus() == CrawlStatus.AUTHED.getCode()) {
                OrderExtend orderExtend = new OrderExtend();
                orderExtend.setUserId(user.getId());
                orderExtend.setPhone(info.getPhone());
                orderExtend.setIdCard(info.getIdCard());
                orderExtend.setOrderId(order.getId());
                orderExtend.setOrderNo(orderNo);
                orderExtend.setOrderDevicetoken(request.getDevicetoken());
                orderExtend.setReportNo(info.getReportNo());
                orderExtend.setIpAddress(request.getHeader().getIp());
                orderExtend.setXinyanToken(request.getXinyanToken());
                orderExtend.setBlackBox(request.getBlackBox());
                orderExtend.setOrderAddress(request.getOrderAddress());
                new MachineApproveThread(orderExtend).start();
            }

            response.setData(orderNo);
            logger.info(String.format("应答:%s", JsonUtil.toJSONString(response)));
            return response;

猜你喜欢

转载自www.cnblogs.com/zjhgx/p/9976914.html
今日推荐