谷粒商城
毕业项目
热河路流浪狗
这个作者很懒,什么都没留下…
展开
-
订单服务
环境搭建:搭建SpringSession 环境:1.导入SpringSession 的依赖2. 在配置文件中配置session 是用redis 进行存储的3.编写Session 的配置线程池配置:引入redis:服务开启SpringSession:一个订单的核心调度过程:我们的项目没有售后服务。完成功能:购物车中点击“去结算” 时,去到订单页面。注意:订单页面是只有登录以后才能进入的,所以order 服务要配置一个拦截器配置拦截器配置拦截器路径:以上原创 2020-12-12 16:27:22 · 731 阅读 · 0 评论 -
Sentinel
熔断&降级&限流熔断降级限流 对于Sentinel 都能做到。原创 2020-11-25 21:27:48 · 311 阅读 · 0 评论 -
秒杀服务
去到我们的后台管理系统查询上架秒杀商品的管理页面:然后查看它所发送的请求,我们就知道应该编写哪个服务的数据配置网关路由:注意:url 和id 一定要写在同一列,因为他们是同级别的。gateway 也会识别出这块的格式。点击新增,就能增加秒杀活动的场次添加了两个场次:每个场次都能关联对应的商品:根据点击这个"关联商品" 出现的request 请求,我们找到后台的Controller。然后修改里面的参数。我们要达到的效果是:点击不同场次,显示出不同场次中包含的商品,所以查询时应该带.原创 2020-11-24 21:25:51 · 338 阅读 · 0 评论 -
消息队列
RabbitMQ :#:0 个或多个单词*: 必须有一个单词SpringBoot 整合RabbitMQ:1.引入依赖(以gulimall-order 服务为例):2.在配置文件中配置RabbitMQ 的位置:3.在项目中开启RabbitMQ 功能:利用Java 代码创建Exchange,Queue,Binding,以及收发消息使用AmqpAdmin 来进行创建创建。 @Autowired AmqpAdmin amqpAdmin; @...原创 2020-11-12 19:40:15 · 99 阅读 · 0 评论 -
商品详情
效果图:商品详情页是从搜索页面点击商品图片或者商品标题来跳转过去的所以每个商品详情页的html 都是由他们的skuId 来决定的。thymeleaf 拼接字符串语法:“|要拼接的字符串|”原创 2020-11-05 21:04:43 · 1151 阅读 · 0 评论 -
异步与线程池
异步:在java 中都是以Thread,开启线程的方式进行的。第一种:继承Thread运行结果:第二种:实现Runnable 接口:运行效果:第三种:Callable接口,配合FutureTask 进行使用它的泛型就是返回值的类型FutureTask 的本质就是一个Runnablemain():运行结果:Callable 好处:能拿到异步线程的结果。但是它是一个阻塞等待。只有等拿到返回结果以后,才能想让Runnable 有返回值也是可以的。如果FutureT原创 2020-11-04 19:29:36 · 614 阅读 · 0 评论 -
检索功能
和检索的所有功能都放在search 服务下:因为要对前端页面进行搭建:所以search 服务中需要引入thymeleaf在Index 页面中,引入thymeleaf 的名称空间。功能说明:当点击搜索按钮时,就应该跳转到search 服务的index...原创 2020-11-04 13:34:55 · 994 阅读 · 0 评论 -
性能优化
缓存与分布式锁缓存:要学会合理使用缓存,这样能极大提升系统性能伪代码:最简单的缓存模型:Map这种在类中的缓存成为:本地缓存本地缓存:缓存组件和程序是在同一线程中,在同一个JVM 中的。本地缓存在单个项目运行是没问题的,但在分布式环境中使用有很多问题。1.一次请求负载均衡到一个product 中,该product 中没有数据,先去数据库查询一次,将数据放进缓存中并返回。但第二次请求负载均衡到另一个product 服务中,此时的product 也没有数据,那么又要在进行一次数据库查询。原创 2020-10-30 22:27:26 · 433 阅读 · 0 评论 -
性能压测
性能监控:CPU 密集型/ IO 密集型:当前应用是浪费CPU(大量的计算) 比较多还是IO(网络IO,磁盘读写(数据库读数据…)) 比较多性能监控主要是来监控JVM 的工作。主要优化的地方是运行时数据区:使用jdk 自带的工具:jvisualvm来检测jvm 内存中的变化。使用JMeter 对一下两个接口进行压力测试中间件:nginx, tomcat 对性能的影响...原创 2020-10-28 20:17:07 · 247 阅读 · 0 评论 -
商城业务 首页
整合thymeleaf 渲染首页模板引擎:thymeleaf-starter: 关键缓存静态资源都放在static 文件夹下就可以按照路径直接访问页面都放在templates 下,直接访问SpringBoot 访问项目时默认会找Index关闭缓存把html 页面放到product 的templates 中,然后访问product 的端口号编写功能:1.当访问http://localhost:10001/ 和http://localhost:10001/index.html 时都原创 2020-10-26 17:06:57 · 238 阅读 · 1 评论 -
商城业务 商品上架
sku 在es 中存储模型分析项目中使用到ES 的两个地方。想要在ES 中检索数据,ES 中就得存有数据。为什么检索不用MySQL 而用ES 呢?ES 是将数据存在内存中的,MySQL 做复杂的检索时性能是远不及ES 的。商品很多的话,全在ES 中,ES 又将数据都存在内存中,内存够吗?ES 是天然支持分布式的,一个ES 不够,可以多装几个ES 分布在不同服务器中,然后ES 就会将数据分片存储,不同的服务器都存一些数据。即一台电脑的内存容量不够,就用数量来凑。所以现在要将商品数据从数据库中都存原创 2020-10-24 16:43:40 · 442 阅读 · 0 评论 -
SpringBoot 整合ElasticSearch,high level client
分三步:1.导入依赖2.编写配置,给容器注入一个RestHighLevelClient3.使用1.先创建一个模块,然后导入ES 的high level client3.index: 可从ES 中保存和更新数据。检索:也就是要构造出一下的格式...原创 2020-10-23 15:18:23 · 862 阅读 · 0 评论 -
全文检索 ElasticSearch
入门 catput: 一定要带id,不然会报错。post:不一定要带id,不带id的话es 会自动创建一个数据。A,B 同时发送请求去修改同一条数据,当B 先将数据修改成功后,_seq_no 就是+1,而此时A 就可以检测一下,_seq_no 还是否是一开始看到的0,如果不是,则停止A 对数据的修改。所以此时A 还想继续修改数据,那么就要查询出最新的信息,然后根据最新信息再来进行修改。在更新操作中,如果上一次更新和这一次更新的数据都是一样的,result:“noop” -> no原创 2020-10-22 20:46:43 · 457 阅读 · 0 评论 -
商品服务-API-商品管理
SPU规格维护要有商品规格回显功能:以上商品属性信息回显完成。当点击“确定”按钮时,就会发送update 请求,发送请求保存修改后的数据注意:update 数据,相当于以前的数据都不要了,现在最新的数据才是想要的,所以可以直接delete 以前的数据,然后再把最新的数据保存...原创 2020-10-20 21:54:16 · 330 阅读 · 0 评论 -
仓储服务-API-仓库管理
整合ware服务 & 获取仓库列表对应数据库wms,仓库表: wms_ware_info,代表当前有几个仓库。 wms_ware_sku:那个仓库的哪个商品的库存数量。 ware_order_task: 库存的订单。 ware_order_task_detail:库存订单详情。purchase: 采购单。 purchase_detail:采购单详情对应服务模块:gulimall_ware首先把它注册到Naocs 中在网关处配置一个属于它的路由规则:编写模糊查询功能:Tips原创 2020-10-20 20:51:56 · 702 阅读 · 0 评论 -
商品服务-API-商品管理
要做这个页面的功能:可以看出,这个搜索功能是包含多个参数的复杂检索。根据请求url,找出对应Controller,然后编写对应的方法 @Override public PageUtils queryPageByCondition(Map<String, Object> params) { QueryWrapper<SpuInfoEntity> wrapper = new QueryWrapper<>(); Strin原创 2020-10-19 20:29:19 · 197 阅读 · 0 评论 -
商品服务-API-属性分组
SPU 与SKU要做到的效果因为左边布局都是原来在category 中的菜单,所以这个菜单数据就可以抽取出来当成一个组件。在其他类中引入该菜单组件。最终以标签的形式进行使用。效果图:表格中的前端代码直接从逆向生成的代码中获取,然后复制attrgroup.vue 的全部代码里面需要导入一个AddOrUpdate 的组件效果图:实现功能:当点击菜单列表中的数据时,右边表格能动态显示出属于它的数据。这里要用到Vue 中的高级功能。父子组件传递数据。子组件给父组件原创 2020-10-17 20:25:13 · 505 阅读 · 0 评论 -
商品服务-API-三级分类(2)
自定义节点内容:要实现这些效果直接参照它自带的代码就行了slot-scope:={node,data}, 这里使用了结构表达式,传入了node 对象和data,以方便后面的节点使用。设置好以后运行页面,发现当点击Appen/Delete 的时候也会进行菜单的伸缩,我们的目的是点击箭头才进行菜单的伸缩,点击其他数据是不会进行菜单的伸缩,所以还要再加一个参数。只有是一级菜单或者二级菜单才能有Append,因为我们总共只有三级菜单;只有当前菜单没有子节点的时候才能删除节点。然后还要为菜单加上原创 2020-10-10 22:22:32 · 307 阅读 · 0 评论 -
商品服务-API-三级分类(1)
这些数据都来源于数据库,要对数据进行维护,查询。那么就要对product 模块的CategoryController 进行修改去到CategoryService 生成对应方法:再去impl 编写具体的Service 的方法功能:查出所有分类...原创 2020-10-07 20:02:25 · 412 阅读 · 0 评论 -
Vue - 使用Element-UI 协助开发
整合Element-UI 组件控制台输入命令: npm i element-ui 即可完成安装然后引入UI 样式:使用UI 提供的样式,并与样式进行数据绑定效果图:备选项2 默认选中快速使用Element-UI 搭建后台管理系统服务:因为main.js 默认第一个访问App 组件,所以把App 中的内容重新修改了。<template><!-- el-container: 是一个大容器,包含整个页面--> <el-container style原创 2020-10-03 21:01:31 · 167 阅读 · 0 评论 -
前端基础 - Vue 计算属性,侦听器,过滤器,组件化,生命周期钩子函数
计算属性(根据数据变动,动态算出结果):效果图:侦听器(每次数据变动时候监听数据的前后变化):效果图:应用场景:监听数据上限,如果超过上限,则将数据值为最大值。过滤器:常用来处理文本可是化的操作,过滤器可以用在两个地方:双花括号插值和 v-bind 表达式这个1,0 是从数据库中取出来的,代表着男,女。但是只是数据库中的数据,要把它转换成“男,女”可以在插值表达式中用三元运算符:如果在复杂场景,这样是不行的,这时就要用到过滤器:这个过滤器是写在Vue 对象里面的,成为局原创 2020-10-03 19:55:08 · 113 阅读 · 0 评论 -
前端基础 Vue-指令
v-html: 会将msg 中的标签符号进行识别并转换成标签v-text: 这个指令和"{{xxx}}(差值表达式)" 的效果是一样的。但是呢如果在控制台(网页F12)的Network 设置成"3g"或者更慢的网速,运行差值表达式{{xx}}的时候会是这样的然后过一会才会显示msg 中的信息:这个过程称为: “差值闪烁”,页面还没渲染直线直接将表达式渲染出来,这样很不友好。但是如果用v-text 就不会有这样的效果。关于差值表达式:得出效果:注意:整个差值表达式是写在html 标签体.原创 2020-10-02 19:24:53 · 120 阅读 · 0 评论 -
前端基础部分
技术栈介绍:1.VSCode:开发用的前端工具2.ES6:ECMAScript的重要性:ES6新特性:1).let 声明变量let与var 之间的比较2).const声明常量(只读变量)3).解构表达式3.1).数组解构3.2). 对象解构这样写代表把person 的name属性解构出来给abc,所以输出的时候就用abc作为变量3.4). 字符串扩展1.几个新的API2.字符串模板" ` ": 这个符号就是键盘数字列1左边的符号可以和对象解构一起使原创 2020-09-18 22:23:08 · 132 阅读 · 0 评论 -
搭建分布式系统的基本环境 - 网关
好处一:网关能实现动态的路由到各个服务,比如前端发送请求到1号机器的10000端口,但1号机器已经下线了,网关能从注册中心中实时感应上线的服务,总是能正确的路由到正确的位置好处二:在网关处加上权限,以保证系统的健全好处三:解耦:让原本是每个服务所需要实现的功能同一抽取到网关模块中before:current:所以就使用SpringCloud 提供的Gateway 组件来实现网关功能关于SpringCloud Gateway 的基本概念路由:网关将请求路由到指定的服务或地址。路由就包括几.原创 2020-09-18 21:16:57 · 651 阅读 · 0 评论 -
搭建分布式系统的基本环境 - Nacos作为配置中心
在gulimail - common 的pom 文件中引入Nacos Config 的依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>然后在除了gulimail - common项目以外,都要在原创 2020-09-17 21:50:04 · 147 阅读 · 0 评论 -
搭建分布式系统的基本环境 - Nacos作为注册中心
框架:所用到的微服务组件:配置SpringCloud Alibaba,配置在gulimall-common 的pom.xml 中 <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId原创 2020-09-17 16:18:39 · 184 阅读 · 0 评论 -
数据存储部分
Power Designer: 负责显示并显示数据库的表结构信息Docker 中的mysql : 负责存储表数据原创 2020-08-11 21:53:07 · 95 阅读 · 0 评论 -
相关插件与Gitee 的配置
IDEA:安装插件 :Lombok: 用于简化java bean 的开发MyBatisX: Mapper 的方法快速定位到XML 文件安装前端开发工具:Visual Studio Code在里面安装插件: Auto Colse Tag, Auto Rename Tag,VS Code 的简体中文包:Chinese (Simplified) Language Pack for Visual Studio Code,ESLint(ES语法检查的插件),HTML CSS Support,HTML Sni原创 2020-08-11 21:53:21 · 119 阅读 · 0 评论 -
Docker 安装Mysql,Redis
下载Mysql:sudo docker pull mysql:5.7如果不带上版本号的话默认下载最新版本启动Mysql: docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -v /mydata/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=root \ -d my原创 2020-08-11 21:53:39 · 87 阅读 · 0 评论 -
02-项目结构
微服务架构图谷粒项目属于前后端分离开发:内网部署,外网部署。外网部署:面向公众访问的前端项目内网部署:后端服务器项目请求流程:通过任意客户端给后端服务发送请求, 请求先通过Nginx集群。Nginx 将服务转交给Api 网关(SpringCloud GateWay,网关的功能:根据当前请求动态路由到哪个业务模块,当调用的服务模块是集群的时候,网关可以根据当前情况进行负载均衡调用服务模块;当某些服务模块出现问题,可以由网关级别对服务模块进行同一的熔断及降级(Alibaba 提供的SpringC原创 2020-08-05 16:19:36 · 155 阅读 · 0 评论 -
分布式基础概念
分布式基础概念把每个模块都拆分开来,每个模块都能独立运行,一个完成的项目就由这一个个的模块进行组成。好处:当一个模块出现问题的时候,不影响其他模块的运行,并且问题排查速度快,花费的人力,物理资源少。为什么要用HTTP+JSON 的方式来进行远程调用?JSON 是通用的网络传输方式,JSON ,HTTP在任意平台都能使用(PHP,C++…).在远程调用过程中,过程就是从一个模块传输信息到另外一个模块,难免有时候会出现访问业务模块的压力过大,而每个业务模块背后都会有好几台服务器集群支持其运作的。所原创 2020-08-05 15:10:04 · 151 阅读 · 0 评论