谷粒商城分布式基础篇
谷粒商城分布式高级篇(上)
谷粒商城分布式高级篇(中)
谷粒商城分布式高级篇(下)
virtualbox 6.1.10
vagrant2.2.9
vagrant init centos7 https://mirrors.ustc.edu.cn/centos-cloud/centos/7/vagrant/x86_64/images/CentOS-7.box
vagrant up
vagrant ssh
(注意在有vagrantfile
的目录 启动vagrant
命令)在VagrantFile
修改配置
vagrant reload
互相ping 通
网上都有: 教程
如果国内镜像下载docker
很慢,可以试试用手机热点下载,亲测有效
docker 开机自启 systemctl enable docker
docker pull mysql:5.7
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/log:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
-p 3306:3306
将容器的3306端口映射到主机的3306端口--name mysql
容器命名为 mysql-v /mydata/mysql/cong:/etc/mysql
将docker的实例配置文件夹挂载到主机-v /mydata/mysql/log:/var/lib/mysql
将docker的日志文件夹载到主机-v /mydata/mysql/conf:/etc/mysql
将docker的配置文件夹挂载到主机-e MYSQL_ROOT_PASSWORD=root
初始化root用的密码docker ps
查看在运行的容器vi /mydata/mysql/conf/my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
docker
自启动 docker update mysql --restart=always
docker exec -it mysql /bin/bash/
启动失败 docker logs [容器id]
查看日志
2023-01-19 01:09:34+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 5.7.41-1.el7 started.
2023-01-19 01:09:34+00:00 [ERROR] [Entrypoint]: mysqld failed while attempting to check config
command was: mysqld --verbose --help --log-bin-index=/tmp/tmp.JmvWhCmjVf
mysqld: Can't read dir of '/etc/mysql/conf.d/' (Errcode: 2 - No such file or directory)
mysqld: [ERROR] Fatal error in defaults handling. Program aborted!
配置文件有问题
删掉docker 容器
sudo mkdir -p /etc/mysql/conf.d
sudo docker run --privileged=true \
-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/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
docker pull redis
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf
redis-cli
命令连接 docker exec -it redis redis-cli
vi /mydata/redis/conf/redis.conf
# 添加如下内容
appendonly yes
docker update redis --restart=always
git
git bash
git config --global user.name "username"
username 随意git config --global user.email "[email protected]"
注册gitee 时用的邮箱ssh-keygen -t rsa -C "[email protected]"
连续三次回车cat ~/.ssh/id_rsa.pub
或找到生成路径查看生成的密钥ssh -T [email protected]
测试是否成功根目录新建pom 聚合服务
pom添加进maven工程
设置忽略文件
第一次commit
克隆两个项目
renren-fast属于后端模块导入工程
创建后台管理的数据库并导入
修改配置 并运行
clone导入renren-genertor
填入需要逆向的数据库地址,模块名,包名
创建 common 模块,抽取各个公共依赖放入
每个模块都依赖common
调整生成器Controller的模板 注释这一段
主键自增
依法炮制各个模块
安装 10.* . *
版本,与教学中大版本保持一致
注意设置淘宝镜像源
在npm install
时 模块 node-sass
还是从github
中拉取,导致拉取失败所以还需单独设置 此模块的镜像源
npm config set registry http://registry.npm.taobao.org/
npm i node-sass --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/
//运行前端项目
npm install
npm run dev
检查 spring-cloud 、spring-boot、spring-cloud-alibaba 的对应版本
需根据 对应版本说明 调整 自身项目的对应版本,或严格按照教程所示版本
common中导入nacos
1.1.3版本 启动nacos
配置文件nacos地址和模块名
配置中心配置列表新建配置,默认为模块名的properties文件
controller上注解动态刷新配置
配置分组
可以分组隔离
bootstrap.properties文件中
一个路由里面包含多个Predicate和多个Filter
请求到达网关,网关利用断言 Predicate 判断这次请求是否符合路由规则 Route 如果符合了,经过一系列 Filter 路由到指定地方
spring初始化向导创建一个moudle网关
配置模块将模块注册到 nacos 注册中心和配置中心
排除数据库相关配置
前端新增目录
新增菜单
在element组件加入 Tree树形控件
发现请求路径错误
修改基准地址
转发至网关 88 端口
发现验证码错误,将后端管理模块renren-fast也加入注册中心,也由网关分配地址
网关路径重写为正确地址
配置商品服务的网关
粒度大的往后,粒度细的提前
前端获取到数据
正确显示
使用scope
只有在点击箭头才收缩节点
限制按钮显示
添加选择框
设置节点唯一标识
category控制器中delete方法自定义逻辑删除
查看官方文档
此步可省略,直接在字段属性上加@TableLogin
注解
确认提示框
默认展开节点
因为做了mybtis的逻辑删除,所以查询时会自动过滤逻辑标记字段
品牌表
创建第三方模块,整合oss
排除数据库配置
三方服务模块创建 osscontroller 获取签名的接口
报错
OSSClient 组件未找到
原因
对象存储环境的自动配置中 容器 Bean放的ossClient OSS 是接口类型
自动注入时要保持一致
—>
配置好后也要将此模块加入到网关中
如果出现 OSS项目启动报错 Field ossClient not found
那么手动注入
将前端编写好的上传组件加入到 项目 commonents 中
替换文件中的 bucket 地址
在要用到文件上传功能的地方导入组件
小问题,接口方面优化返回值
设置bucket跨域权限
使用 elementui的 imge组件
报错没有注册 imge组件
组件注册步骤
3. 可按需导入需要的组件
4. 此报错为 此版本 element-ui 没有以下组件,删除这些组件即可
controller开启校验
还可以自定义返回提示
自定义校验返回,紧跟被校验对象加BindingResult
获取和处理校验返回结果
可以标注多个校验注解
用到SpringMVC提供的 ControllerAdvice
新建一个包存放统一处理,指定需要处理的包basepackge
取消方法中的异常处理,都交给统一处理
@ExceptionHandler 感知异常和指定的异常类
发现异常类型为
遂可以精确获取异常
上面处理精确异常,而后需要一个捕获所有异常
并统一异常代码
再公共模块中编写统一异常码的枚举类
groups必须指定一个接口类型,此接口类型仅作标识用,无需任何实现
接口方法指定校验组,使用spring提供的validated
ConstraintValidator
接口所以,自定义的检验类必须实现ConstraintValidator
这个接口ConstraintValidator
接口有两个泛型,第一个泛型指定注解,第二个泛型为被校验数据的基本类型
6. 编写自定义校验器,添加两个实现方法
initialize
初始化方法,获取校验注解上输入的 vals
的值 ,并封装在 set 数组里,方便isValid
方法处理
isValid
方法对输入的值进行判断处理, Integer value
参数为输入的值
7. 校验器的原信息中指定刚才编写的检验方法
spu => 基本属性 => 规格与包装
sku=>销售属性
导入菜单表
抽取一个三级分类
使用分隔jianlan
导入抽取的三级分类
导入自动生成 的 attrgroup组件及其方法
父子组件传递数据
tree组件中的事件函数
函数中向父组件发送数据 this.$emit
父组件的子引用部分可以 接受这个事件
父组件就可以处理这个事件
就可以获取到被点击的 catid
查询的 是 pms_attr_group
一个被封装的标准分页返回
当前类默认生成的方法 this.page,传入分页信息page 和查询条件封装 queryWrapper
构造查询条件
select * from pms_attr_group where catelog_id=? and (attr_group_id=key or attr_group_name like %key%)
级联选择器的选中值为数组
所以提交时,只提交数组最后一个元素
级联选择器的正确显示需要一个数组,所以要根据cateLogId查询完整的 父子 路径
保证冗余数据的准确性,修改相关冗余时,同时修改冗余
修改 品牌修改接口增加冗余修改
分类修改时同上
首先保证基本更新,再冗余更新
mybatis 快捷 创建sql
使用 @Param 注解快捷传入sql 值
属性分组 查询全部时 没有模糊查询
更改接口细节
什么是vo ,vo是根据当次接口需要的数据字段,替代原装持久层的
接受页面传递来的数据,封装对象
将业务处理完成的对象,封装成页面要用的对象
多了attrGroupId
重新编写保存接口
复制需要提交的json数据,格式化json数据
使用工具 json转java 实体类,设置好 类名和包名生成并下载,导入到工程
调整 上一步生成的vo 价格字段都设为BigDeciaml,主键都为Long类型
由于有 Lomobank 所以去掉 get set
加上事务注解
设置 mysql 隔离级别为读未提交,可以读到 事务中已经提交的数据,事物失败后会回滚
过滤空的图片路径
显示400,给admin表加入菜单
INSERT INTO sys_menu (menu_id, parent_id, name, url, perms, type, icon, order_num) VALUES (76, 37, '规格维护', 'product/attrupdate', '', 2, 'log', 0);