SpringBoot秒杀系统实战19-秒杀静态化+订单详情静态化

本文介绍了SpringBoot秒杀系统的静态化处理,包括商品秒杀和订单详情页面的静态化改造,以减少服务器压力。通过前端ajax异步请求实现秒杀操作,成功后直接跳转至静态订单详情页面。同时,文章讨论了解决超卖问题的策略,如在更新库存时设置库存限制条件或使用读锁避免并发导致的超卖情况。
摘要由CSDN通过智能技术生成
文章目录

秒杀静态化

改造商品详情页面的点击秒杀的业务逻辑,我们调用js方法实现ajax异步发送消息,如果秒杀成功,那么直接由客户端去跳转详情页面

window.location.href="order_detail.htm?orderId="+data.data.id;
function doMiaosha(){
		//alert("秒杀!");
		$.ajax({
			url:"/miaosha/do_miaosha",
			type:"POST",
			data:{
				goodsId:$("#goodsId").val()			
			},
			success:function(data){
				if(data.code==0){
					//秒杀成功,跳转详情页面
					window.location.href="order_detail.htm?orderId="+data.data.id;		
				}else{
					layer.msg(data.msg);
				}
			},
			error:function(){
				layer.msg("请求有误!");
			}
			//token如果cookie里面有,会自己带过去
			
		});
	}

改造后台接收秒杀请求的doMiaosha方法接口,让其不在去跳转页面了,而是直接返回包装好的数据
原来我们是这样写的:

	@RequestMapping("/do_miaosha")//传入user对象啊,不然怎么取user的值,${user.nickname}
	public String toList(Model model,MiaoshaUser user,@RequestParam("goodsId") Long goodsId) {
		model.addAttribute("user", user);
		//如果用户为空,则返回至登录页面
		if(user==null){
			return "login";
		}
		GoodsVo goodsvo=goodsService.getGoodsVoByGoodsId(goodsId);
		//判断商品库存,库存大于0,才进行操作,多线程下会出错
		int  stockcount=goodsvo.getStockCount();		
		if(stockcount<=0) {//失败			库存至临界值1的时候,此时刚好来了加入10个线程,那么库存就会-10
			model.addAttribute("errorMessage", CodeMsg.MIAOSHA_OVER_ERROR);
			return "miaosha_fail";
		}
		//判断这个秒杀订单形成没有,判断是否已经秒杀到了,避免一个账户秒杀多个商品 
		MiaoshaOrder order=orderService.getMiaoshaOrderByUserIdAndCoodsId(user.getId(),goodsId);
		if(order!=null) {//重复下单
			model.addAttribute("errorMessage", CodeMsg.REPEATE_MIAOSHA);
			return "miaosha_fail";
		}
		//可以秒杀,原子操作:1.库存减1,2.下订单,3.写入秒杀订单--->是一个事务
		OrderInfo orderinfo=miaoshaService.miaosha(user,goodsvo);
		//如果秒杀成功,直接跳转到订单详情页上去。
		model.addAttribute("orderinfo", orderinfo);
		model.addAttribute("goods", goodsvo);
		return "order_detail&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值