记录一次由事务可重复读引起的问题
Posted zjhgx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一次由事务可重复读引起的问题相关的知识,希望对你有一定的参考价值。
原由是现金贷在下单时为了让订单创建的事务时间尽可能小在插入订单后单独起一个线程去机审,结果在机审中根据这个新订单号却查不到这个订单报订单不存在,原先以为是因为创建订单的事务还没提交就去查所以查不到,所以在机审的代码里写了个循环去查,中途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;
以上是关于记录一次由事务可重复读引起的问题的主要内容,如果未能解决你的问题,请参考以下文章