当前位置: 首页 > news >正文

中国自适应网站建设郑州seo公司排名

中国自适应网站建设,郑州seo公司排名,软文推广服务,网站建设的方案预算登录方式调整 第1步:从zmall-common的pom.xml中移除spring-session-data-redis依赖 注意: 1)本次不采用spring-session方式,改用redis直接存储用户登录信息,主要是为了方便之后的jmeter压测; 2&#xff09…

登录方式调整

第1步:从zmall-common的pom.xml中移除spring-session-data-redis依赖

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EGgFVLjU-1676371517002)(images\20220817224735.jpg)]

注意:
1)本次不采用spring-session方式,改用redis直接存储用户登录信息,主要是为了方便之后的jmeter压测;
2)这里只注释调用spring-session的依赖,保留redis的依赖;

第2步:在zmall-common公共模块中定义RedisConfig配置类

@Configuration
public class RedisConfig {@Beanpublic RedisTemplate<String,Object> restTemplate(RedisConnectionFactory redisConnectionFactory){RedisTemplate<String,Object> redisTemplate=new RedisTemplate<>();//String类型Key序列化redisTemplate.setKeySerializer(new StringRedisSerializer());//String类型Value序列化redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());//Hash类型Key序列化redisTemplate.setHashKeySerializer(new StringRedisSerializer());//Hash类型Value序列化redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());redisTemplate.setConnectionFactory(redisConnectionFactory);return redisTemplate;}
}

第3步:在zmall-common公共模块中配置redis相关服务

IRedisServcie

public interface IRedisService {/*** 将登陆用户对象保存到Redis中,并以token来命名* @param token* @param user*/void setUserToRedis(String token, User user);/*** 根据token令牌从Redis中获取User对象* @param token* @return*/User getUserByToken(String token);
}

RedisServcieImple

@Service
public class RedisServiceImpl implements IRedisService {@Autowiredprivate RedisTemplate<String,Object> redisTemplate;@Overridepublic void setUserToRedis(String token, User user) {String key="user:"+token;redisTemplate.boundValueOps(key).set(user,7200,TimeUnit.SECONDS);}@Overridepublic User getUserByToken(String token) {return (User) redisTemplate.opsForValue().get("user:"+token);}
}

用户登录成功后,将用户对象保存到Redis中,并设置超时时间7200秒。

第4步:配置自定义参数解析UserArgumentResolver、WebConfig

UserArgumentResolver

/*** 自定义用户参数类*/
@Component
public class UserArgumentResolver implements HandlerMethodArgumentResolver {@Autowiredprivate IRedisService redisService;/*** 只有supportsParameter方法执行返回true,才能执行下面的resolveArgument方法* @param methodParameter* @return*/@Overridepublic boolean supportsParameter(MethodParameter methodParameter) {Class<?> type = methodParameter.getParameterType();return type== User.class;}@Overridepublic Object resolveArgument(MethodParameter methodParameter,ModelAndViewContainer modelAndViewContainer,NativeWebRequest nativeWebRequest,WebDataBinderFactory webDataBinderFactory) throws Exception {HttpServletRequest req= (HttpServletRequest) nativeWebRequest.getNativeRequest();//从cookie获取token令牌String token = CookieUtils.getCookieValue(req, "token");//判断cookie中的token令牌是否为空if(StringUtils.isEmpty(token))throw new BusinessException(JsonResponseStatus.TOKEN_ERROR);//根据token令牌获取redis中存储的user对象,方便jmeter测试User user = redisService.getUserByToken(token);if(null==user)throw new BusinessException(JsonResponseStatus.TOKEN_ERROR);return user;}
}

WebConfig

@Component
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate UserArgumentResolver userArgumentResolver;@Overridepublic void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {resolvers.add(userArgumentResolver);}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {//添加静态资源访问映射//registry.addResourceHandler("/static/**")//        .addResourceLocations("classpath:/static/");}
}

第5步:用户登录业务调整,将spring-session方式更改为redis方式存储登录用户信息。

//5.通过UUID生成token令牌并保存到cookie中
String token= UUID.randomUUID().toString().replace("-","");
//将随机生成的Token令牌保存到Cookie中,并设置1800秒超时时间
CookieUtils.setCookie(req,resp,"token",token,7200);
//6.将token令牌与spring session进行绑定并存入redis中
//HttpSession session = req.getSession();
//session.setAttribute(token,us);
//将token令牌与user绑定后存储到redis中,方便jmeter测试
redisService.setUserToRedis(token,us);

这里采用Redis方式直接存储登录用户信息,只为后续使用Jmeter压测时提供便利。正常运行使用项目还是可以使用spring-session方式。

第6步:修改商品服务zmall-product模块中的index方法,将之前从HttpSession中获取登录用户信息改换成User对象参数方式

@RequestMapping("/index.html")
public String index(Model model, User user){System.out.println(user);
}

在调用index方法之前,先由自定义的参数解析器进行参数解析并返回解析结果User,所以在这里可直接在方法参数中获取的User对象。

第7步:重启zmall-user和zmall-product模块,完成用户登录后,直接在浏览器地址栏输入:http://zmall.com/product-serv/index.html,查看zmall-product模块中的控制台是否已经获取到登录用户对象信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nf3XjJz0-1676371517006)(images\20220817233131.jpg)]

生成秒杀订单

绑定秒杀商品

添加sellDetail.html页面到zmall-product模块中;实现首页秒杀商品展示,必须保证秒杀商品状态为已激活、且秒杀商品的活动时间为有效时间范围之内。

 <#if kills??><#list kills as g><div class="sell_${g_index?if_exists+1}"><div class="sb_img"><a href="${ctx}/sellDetail.html?pid=${g.id}"><img src="${g.fileName}" width="242" height="356" /></a></div><div class="s_price">¥<span>${g.price}</span></div><div class="s_name"><h2><a href="${ctx}/sellDetail.html?pid=${g.id}">${g.name}</a></h2>倒计时:<span>1200</span> 时 <span>30</span> 分 <span>28</span> 秒</div></div></#list></#if>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A1zL4Qix-1676371517008)(images\2022-08-18_164403.png)]

查看秒杀商品

点击限时秒杀中的秒杀商品,根据秒杀商品ID查询秒杀商品详情信息并跳转到sellDetail.html页面展示秒杀商品信息。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NWNimZH4-1676371517017)(images\2022-08-18_164751.png)]

订单秒杀

移除seata相关

第1步:先注释掉zmall-order和zmall-product模块中的seata依赖

第2步:分别删掉zmall-order和zmall-product模块中resources目录下的bootstrap.xml和register.conf文件

第3步:移除zmall-order中分布式事务案例中的@GlobalTransactional注解

第4步:删除DataSourceProxyConfig该类

第5步:移除zmall-order中启动类上的注解参数(exclude = DataSourceAutoConfiguration.class)

//更改前:
//@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
//更改后:
@SpringBootApplication
@EnableDiscoveryClient
@MapperScan({"com.zking.zmall.mapper"})
@EnableFeignClients
public class ZmallOrderApplication {public static void main(String[] args) {SpringApplication.run(ZmallOrderApplication.class, args);}}

第6步:更换zmall-order和zmall-product中的application.yml配置中的数据库连接池

datasource:#type连接池类型 DBCP,C3P0,Hikari,Druid,默认为Hikari#更改前:#type: com.alibaba.druid.pool.DruidDataSource#更改后:type: com.zaxxer.hikari.HikariDataSource

生成秒杀订单

将SnowFlake雪花ID生成工具类导入到zmall-common模块中utils,然后再生成秒杀订单时使用雪花ID来充当秒杀订单编号;在zmall-order模块中完成秒杀订单生成工作。

IOrderService

public interface IOrderService extends IService<Order> {JsonResponseBody<?> createKillOrder(User user, Integer pid);
}

OrderServiceImpl

@Transactional
@Override
public JsonResponseBody<?> createKillOrder(User user, Integer pid) {//1.判断用户是否登录if(null==user)throw new BusinessException(JsonResponseStatus.TOKEN_ERROR);//根据用户ID和秒杀商品Id判断。。。。//2.根据秒杀商品编号获取秒杀商品库存是否为空Kill kill = killService.getOne(new QueryWrapper<Kill>().eq("item_id",pid));if(kill.getTotal()<1)throw new BusinessException(JsonResponseStatus.STOCK_EMPTY);//3.根据商品ID获取商品Product product = productService.getProductById(pid);//4.秒杀商品库存减一killService.updateKillStockById(pid);//5.生成秒杀订单及订单项SnowFlake snowFlake=new SnowFlake(2,3);Long orderId=snowFlake.nextId();//创建订单Order order=new Order();order.setUserId(user.getId());order.setLoginName(user.getLoginName());order.setCost(product.getPrice());order.setSerialNumber(orderId);this.save(order);//创建订单项OrderDetail orderDetail=new OrderDetail();orderDetail.setOrderId(orderId);orderDetail.setProductId(product.getId());orderDetail.setQuantity(1);orderDetail.setCost(product.getPrice());orderDetailService.save(orderDetail);return new JsonResponseBody();
}

前端页面秒杀测试

在sellDetail.html页面中添加订单秒杀JS方法。

<script>$(function(){$('.ch_a').click(function(){let pid=$(this).attr('alt');console.log(pid);$.post('http://zmall.com/order-serv/createKillOrder',{pid:pid},function(rs){console.log(rs);if(rs.code===200)alert('秒杀成功');elsealert(rs.msg);},'json');});});
</script>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LM7Ibg8f-1676371517019)(images\2022-08-18_171847.png)]

这里虽然已经能正常展示秒杀效果,但是还是存在很多问题,比如:重复抢购问题等等问题。

utils:https://pan.baidu.com/s/1ExaC4GgEg_ofKsARkYhHXw
提取码:kq20

http://www.yidumall.com/news/38285.html

相关文章:

  • 专业建站报价短期职业技能培训班
  • php网站开发背景介绍seo免费优化网址软件
  • 微信微网站制作广州网络运营课程培训班
  • 嘉兴网络公司变更关键词优化报价怎么样
  • 著名网站设计公司深圳外贸网络推广
  • 学做粤菜的网站百度推广渠道
  • 武汉网站建设武汉网络公司天津百度seo代理
  • 太平洋电脑网自助装机长春网站优化体验
  • seo网站优化技术个人网站模板
  • 厚街做网站网站推广平台排行
  • 网站建设的布局对网络推广的影响百度地图导航2021最新版
  • 河北建设厅网站怎么搜索文件免费的关键词挖掘工具
  • wordpress 7牛云南京seo培训
  • 淘宝做网站靠谱google推广公司哪家好
  • 中华住房和城乡建设厅网站关键词优化公司排名榜
  • 网站备案全国合作拍照点 腾讯云整站优化关键词排名
  • 百度广告联盟收益南昌seo搜索排名
  • 苏州市优化网站推广哪家好北京seo代理公司
  • 基于互联网怎样做网站推广搜索引擎优化的基本方法
  • 治多县网站建设公司手机百度搜索app
  • 找团队做网站seo培训资料
  • 2级a做爰片免费网站什么是整合营销并举例说明
  • 网页游戏排行榜2011站长工具seo综合查询工具
  • 让人做网站需要注意什么广州网站排名优化报价
  • java在线编程网站最新营销模式有哪些
  • wordpress产品页名称seo运营经理
  • 网页设计自我介绍模板代码福州seo推广服务
  • 沈阳开发网站公司seo提升排名
  • 荣茂网站建设济南网站推广优化
  • 柳州城市的城乡建设管理局网站seo团队管理系统