当前位置:网站首页>谷粒商城(一)
谷粒商城(一)
2022-07-04 16:14:00 【磊哥的小迷妹】
谷粒商城(一)
环境搭建
本项目的 redis、MySQL 都是使用在 docker 容器里面的,所以需要 Linux 环境
安装 docker
1、卸载系统之前的 docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2、安装 Docker-CE
# 安装必须的依赖
yum install -y yum-utils
# yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
# 更新yum软件包索引
yum makecache fast
# 设置stable镜像仓库
这里使用阿里云
yum-config-manager --add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
下面是官网,是外网,不推荐
yum-config-manager --add-repo
https://download.docker.com/linux/centos/docker-ce.repo
# 安装 docker,以及 docker-cli
yum install docker-ce docker-ce-cli containerd.io
3、启动 docker
systemctl start docker
4、设置 docker 开机自启
systemctl enable docker
5、测试 docker 常用命令,注意切换到 root 用户下docker version
6、配置 docker 镜像加速
# 登陆阿里云开发者平台 -> 点击控制台 -> 选择容器镜像服务 -> 下面操作文档里面的配置镜像加速
mkdir -p /etc/docker
vim /etc/docker/daemon.json
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": `["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart
docker 安装 mysql
1、下载镜像文件docker pull mysql:5.7
2、创建实例并启动
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 mysql:5.7
参数说明:-p 3306:3306
:将容器的 3306 端口映射到主机的 3306 端口-v /mydata/mysql/conf:/etc/mysql
:将配置文件夹挂载到主机-v /mydata/mysql/log:/var/log/mysql
:将日志文件夹挂载到主机-v /mydata/mysql/data:/var/lib/mysql/
:将配置文件夹挂载到主机-e MYSQL_ROOT_PASSWORD=root
:初始化 root 用户的密码
MySQL 配置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 NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
注意:解决 MySQL 连接慢的问题
在配置文件中加入如下,并重启 mysql[mysqld]
skip-name-resolve
解释:skip-name-resolve
:跳过域名解析
3、通过容器的 mysql 命令行工具连接docker exec -it mysql mysql -uroot -proot
4、设置 root 远程访问
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
5、进入容器文件系统docker exec -it mysql /bin/bash
docker 安装 redis
1、下载镜像文件docker pull redis
2、设置配置文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
3、修改 /etc/redis/redis.conf 文件
# 开启 redis 验证(可选)
requirepass 123456
# 允许 redis 外地连接,注释掉
# bind 127.0.0.1
# 设置
daemonize no
# 开启 redis 持久化,appendonly yes (可选)
4、创建实例并启动
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
5、使用 redis 镜像执行 redis-cli 命令连接docker exec -it redis redis-cli
设置随着 docker 自启动
docker update mysql --restart=always
docker update redis --restart=always
安装配置 git
1、下载 git https://git-scm.com
2、配置 git,进入 git bash
# 配置用户名
git config --global user.name "username" //(名字)
# 配置邮箱
git config --global user.email "[email protected]" //(注册账号时用的邮箱)
3、IDEA 初始化 git
在用户目录下(C:\Users\ASUS)创建忽略规则文件 git.ignore,写入内容
在 .gitconfig 文件中引用忽略配置文件
在 IDEA 中设置,定位 Git 程序
3、IDEA 集成 Gitee
安装 Gitee 插件,登录 Gitee 账号
进入 git bash;使用:ssh-keygen -t rsa -C "[email protected]"
命令。 连续三次回车
然后执行 cat ~/.ssh/id_rsa.pub
,会得到一串密钥
登录进入 gitee,在设置里面找到 SSH KEY
将 密钥 的内容粘贴进去
使用 ssh -T [email protected] 测试是否成功即可
从 gitee 初始化项目
新建仓库
IDEA 拉取项目
创建项目微服务
商品服务、仓储服务、订单服务、优惠券服务、用户服务
共同:
- 都加入的是 web、openfeign 依赖
- 每一个服务的包名
afei.xxx(product/order/ware/coupon/member)
- 模块名:gulimall-coupon
修改 父类 项目的 pom.xml
修改 父类 项目的 .gitignore 文件
,让其子类的部分文件不被提交
**/mvnw
**/mvnw.cmd
**/.mvn
**/.gitignore
**/target/
.idea
可在这里查看提交到码云的内容预览
初始化数据库
建立对应的数据库
将提供的 sql 文件里面的语句复制进 navicat 执行,直接拖拽容器出现问题
工具 IDEA、VsCode
idea 安装 lombok、mybatisx 、gitee 插件
Vscode 安装开发必备插件:
- Vetur —— 语法高亮、智能感知、Emmet 等 包含格式化功能, Alt+Shift+F (格式化全文),Ctrl+K Ctrl+F(格式化选中代码,两个 Ctrl 需要同时按着)
- EsLint —— 语法纠错
- Auto Close Tag —— 自动闭合HTML/XML 标签
- Auto Rename Tag —— 自动完成另一侧标签的同步修改
- JavaScript(ES6) code snippets — — ES6 语法智能提示以及快速输入,除 js外还支持.ts,.jsx,.tsx,.html,.vue,省去了配置其支持各种包含 js 代码文件的时间
- HTML CSS Support —— 让 html 标签上写 class 智能提示当前项目所支持的样式
- HTML Snippets —— html 快速自动补全
- Open in browser —— 浏览器快速打开
- Live Server —— 以内嵌服务器方式打开
- Chinese (Simplified) Language Pack for Visual Studio Code —— 中文语言包
人人开源搭建后台管理系统
点进去后,克隆
在桌面右击,打开 Git Bash ,将代码下载到桌面
renren-fast
将后端代码复制进 项目 目录
在 父类项目 里面加入 人人开源的 module
<modelVersion>4.0.0</modelVersion>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>gulimall</name>
<description>聚合服务</description>
<packaging>pom</packaging>
<modules>
<module>gulimall-coupon</module>
<module>gulimall-member</module>
<module>gulimall-order</module>
<module>gulimall-product</module>
<module>gulimall-ware</module>
<module>renren-fast</module>
<module>renren-generator</module>
<module>gulimall-common</module>
</modules>
renren-fast 里面有数据库的 sql 语句文件,在数据库创建新库 gulumall_admin ,执行 sql 语句
修改 renren-fast 的配置文件
启动此项目
注意,若 renren-fast 集成了 nacos,就还需要启动 Nacos 服务
communication link failure 的,显示初始化init datasource error的,数据库连接配置后面加 &useSSL=false
报找不到包异常的,用一下右边侧边栏的maven里面的install命令
url后缀这样该gulimall_admin?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false
springboot 版本最好一样 2.1.8.RELEASE
访问 localhost:8080/renren-fast
renren-fast-vue
将桌面上的文件目录 删除 .git 目录,然后用 VsCode 打开
安装 Node.js
前端开发,少不了 Node.js
Node.js 是一个基于 ChromeV8引擎的 JavaScript 运行环境。
NPM是随同NodeJS一起安装的包管理工具,JavaScript-NPM,Java-Maven;
1)、官网下载安装node.js,并使用 node-v
检查版本。注意版本!!
2)、配置npm使用淘宝镜像npm config set registry http://registry.npm.taobao.org/
打开 VsCode ,在终端输入 npm install
也可以选择项目文件夹下打开 cmd 命令窗口,和终端一样(注意需要配置环境变量,参考文章)
输入 npm install 安装 npm,nodejs默认集成npm
这里npm报错的同学,可以退出vs,然后管理员运行vs,再执行一遍。如果还是不行 就新建一个终端再输入一次npm stall就好了
有报错误的,可以试一下用 cnpm install试试先
出错可参考:https://blog.csdn.net/weixin_43859732/article/details/107779450
https://blog.csdn.net/wangbeita/article/details/112517509
出现以下界面说明成功
我这里没有使用 vs,而是使用 cmd 窗口进行操作的
注意执行 npm install 之前,为了防止出错,已经将 renren-fast-vue 项目文件夹下的 package.json 里面的 node-sass 改成 4.9.2
成功后可访问准备启动项目(注意 renren-fast 的 8080 在运行状态,数据库也在运行)
我这里没有下载 vs,在项目的目录下,使用管理员权限打开 cmd ,执行 npm run dev
便可以启动前端项目
这是 vs 启动成功样式
刷新 登录界面的 图形验证码,发现后台有输出,说明成功
人人运行出错:
1、启动renren-fast后台报错 Error creating bean with name ‘scheduleJobService‘
路径:src/main/java/io/renren/modules/job/config/ScheduleConfig.java
ScheduleConfig类中 //PostgreSQL数据库,需要打开此注释
2、在启动之后,登陆时发现跨域问题:
CorsConfig 类中 addCorsMappings 方法,需要打开此注释
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.maxAge(3600);
}
}
3、当有这种报错,说明是因为引入了 mybatis 的依赖,底层就会有引入数据源的相关配置。如果模块中没有使用到数据库,没有配置数据库相关信息,就会报错
解决:
在依赖中排除 数据库自动配置的相关依赖,也可以在启动类中排除@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
数据库逆向工程
可以使用 人人开源的 自动生成项目,也可以使用 MybatisX 插件,使用 IDEA 自带的数据库管理工具
将人人开源的 代码生成 项目克隆到本地
删除目录中的 .git 目录,然后作为项目的 子模块
修改项目的配置文件 application.yml
,更改数据库配置,数据库为需要生成代码的数据库
修改信息文件 generator.properties
,更改里面生成类的包名和类名
项目运行之后,访问页面,可以看到控制台,选择需要的表,进行生成代码
生成出来的代码会以压缩包形式下载
打开压缩包,可以看到生成好的代码
在生成的 controller 类里面,使用的是 shiro 的权限注解,但是本案例中使用的是 SpringSecurity ,所以需要删除注解
但是一个一个删除比较麻烦,可以在生成代码之前,在 renren-generator 项目里面修改模板
将代码复制进需要的项目里面,打开类,发现会有报错,因为一些工具类没有正确引用
对于 如下图 的 common
包中的工具类,在前面使用的 renren-fast
项目里面 的 common 包 下的 util 包里面都有现成的
然后打开其他类,发现还需要 Lombok、MybatisPlus 等依赖,所以可以提供一个公共类项目,用于提供公用的依赖 以及 一些工具类等
gulimall-common 模块
pom.xml
<parent>
<artifactId>gulimall</artifactId>
<groupId>afei.gulimall</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>gulimall-common</artifactId>
<description>每一个微服务公共的依赖,bean,工具类等</description>
<dependencies>
<!-- mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpcore -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.12</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<!--导入mysql驱动 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!--服务注册/发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>2.0.1.Final</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
实体类
将刚刚生成代码的项目里面需要用到的 common 包下的工具类,从 renren-fast 项目里面拷贝过来
暂时只有红框里面的内容,其他内容都是后续手动创建的
gulimall-product 模块
各个模块的端口号
现在测试 CRUD
整合MyBatis-Plus
导入依赖 mybatis-plus-boot-starter 3.2.0 (放在common项目)
配置 :配置数据源;
- 导入数据库的驱动。mysql-connector-java 8.0(放在common项目)
- 在application.yml配置数据源相关信息
配置MyBatis-Plus;
- 使用@MapperScan
- 告诉MyBatis-Plus,sql映射文件位置 ,并设置主键自增
测试
逻辑删除
1)、配置全局的逻辑删除规则(省略)
2)、配置逻辑删除的组件Bean(省略)
3)、给Bean加上逻辑删除注解@TableLogicJSR303
1)、给Bean添加校验注解:javax.validation.constraints,并定义自己的message提示
2)、开启校验功能@Valid 效果:校验错误以后会有默认的响应;
3)、给校验的bean后紧跟一个BindingResult,就可以获取到校验的结果
4)、分组校验(多场景的复杂校验)
1)、 @NotBlank(message = “品牌名必须提交”,groups = {AddGroup.class,UpdateGroup.class}) 给校验注解标注什么情况需要进行校验
2)、@Validated({AddGroup.class})
3)、默认没有指定分组的校验注解@NotBlank,在分组校验情况@Validated({AddGroup.class})下不生效,只会在@Validated生效;
5)、自定义校验
1)、编写一个自定义的校验注解
2)、编写一个自定义的校验器 ConstraintValidator
3)、关联自定义的校验器和自定义的校验注解
分布式组件
nacos注册中心
在 common 项目里面引入依赖
<!--服务注册/发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然后在其他项目里面更改配置文件
在启动类上使用注册发现的注解 @EnableDiscoveryClient
nacos配置中心
在 common 项目里面引入依赖
然后在其他项目里面更改配置文件
如何使用Nacos作为配置中心统一管理配置:
引入依赖, spring-cloud-starter-alibaba-nacos-config
创建一个bootstrap.properties
需要给配置中心默认添加一个叫 数据集(Data Id),Data Id默认命名规则——应用名.properties
给 Data Id 添加任何配置
动态刷新配置
控制器 controller 上面使用注解@RefreshScope
,表明动态获取并刷新配置注意,若配置中心和文件中配置了相同的配置项,优先使用 配置中心的配置
加载多个配置集
openFeign
想要远程调用别的服务:
- 引入open-feign
- 编写一个接口,告诉SpringCloud这个接口需要调用远程服务
- 声明接口的每一个方法都是调用哪个远程服务的那个请求
- 开启远程调用功能
启动类上使用注解@EnableFeignClients
在需要进行远程调用的模块的 pom 文件里面引入依赖
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>com.atguigu.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
目标方法如下:
在 member 模块编写接口
在 member 模块启动类上加注解
最后即可 在 member 模块 实现远程调用
gateway
新建模块,加入 gateway 依赖
- 开启服务注册发现(配置nacos的注册中心地址)
- 编写网关配置文件
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR3</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>afei.gulimall</groupId>
<artifactId>gulimall-common</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
启动类上开启注册发现 @EnableDiscoveryClient
编写配置文件
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
spring.application.name=gulimall-gateway
server.port=88
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.cloud.nacos.config.namespace=b5d62415-0dea-4747-a65d-874cc6203bf2
spring:
cloud:
gateway:
routes:
# 表明请求时如果有参数url,且参数值为baidu时,就会跳转到https://www.baidu.com
# 例如访问 88/hello?url=baidu 会跳转到 baodu.com/hello
# - id: test_route
# uri: https://www.baidu.com
# predicates:
# - Query=url,baidu
# 表明请求时如果有参数 url,且参数值为 qq时,就会跳转到 https://www.qq.com
# 例如访问 88/hello?url=qq,会跳转到 qq.com/hello
# - id: qq_route
# uri: https://www.qq.com
# predicates:
# - Query=url,qq
## 前端项目,/api
## http://localhost:88/api/captcha.jpg http://localhost:8080/renren-fast/captcha.jpg
## http://localhost:88/api/product/category/list/tree http://localhost:10000/product/category/list/tree
边栏推荐
- 【HCIA持续更新】WLAN概述与基本概念
- With an estimated value of 90billion, the IPO of super chip is coming
- Perfectly integrated into win11 style, Microsoft's new onedrive client is the first to see
- mysql5.7安装教程图文详解
- LD_LIBRARY_PATH 环境变量设置
- 【210】PHP 定界符的用法
- curl 命令妙用
- The money circle boss, who is richer than Li Ka Shing, has just bought a building in Saudi Arabia
- 股价大跌、市值缩水,奈雪推出虚拟股票,深陷擦边球争议
- wuzhicms代码审计
猜你喜欢
The controversial line of energy replenishment: will fast charging lead to reunification?
曾经的“彩电大王”,退市前卖猪肉
With an annual income of more than 8 million, he has five full-time jobs. He still has time to play games
补能的争议路线:快充会走向大一统吗?
Superscalar processor design yaoyongbin Chapter 7 register rename excerpt
To sort out messy header files, I use include what you use
Detectron2 installation method
How to test MDM products
7 RSA Cryptosystem
估值900亿,超级芯片IPO来了
随机推荐
celebrate! Kelan sundb and Zhongchuang software complete the compatibility adaptation of seven products
Analysis of I2C adapter driver of s5pv210 chip (i2c-s3c2410. C)
Detectron2 installation method
我写了一份初学者的学习实践教程!
General environmental instructions for the project
Win32 API 访问路由的加密网页
ITSS运维能力成熟度分级详解|一文搞清ITSS证书
Superscalar processor design yaoyongbin Chapter 6 instruction decoding excerpt
Redis主从复制
You should know something about ci/cd
[proteus simulation] printf debugging output example based on VSM serial port
Easy to use map visualization
ARTS_ twenty million two hundred and twenty thousand six hundred and twenty-eight
高中物理:力、物体和平衡
High school physics: force, object and balance
【系统分析师之路】第七章 复盘系统设计(结构化开发方法)
wuzhicms代码审计
ISO27001认证办理流程及2022年补贴政策汇总
How to test MDM products
Face_ Attendance statistics of recognition face recognition