当我将扣减库存的逻辑修改如下时,
// 5. 扣减库存 boolean success = seckillVoucherService.update() .setSql("stock = stock - 1") // set stock = stock - 1; .eq("voucher_id", voucherId).gt("stock", 0) // where id = ? and stock > 0 .update();
我用jmeter去测试时,发现异常率为100%,按理来说是50%,然后我去分析jmeter查看结果树的报告,发现HTTP请求错误的Response code 为 401,那我们在黑马点评里有设置返回状态码为401的一段代码如下,没错原来是我在jmeter没有设置authorization
// 前置拦截器 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 1. 判断是否需要拦截 (ThreadLocal 中是否有用户 if(UserHolder.getUser() == null){ // 没有 需要拦截 设置状态码 response.setStatus(401); return false; } // 有用户 放行 return true; }
1. 如何设置authorization
打开jmeter,右键添加
操作如下
解决了 异常率也为50%,再次验证两张表
查看 tb_seckill_voucher 表,库存stock为0, tb_voucher_order也有100条数据