当我将扣减库存的逻辑修改如下时,
// 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条数据