谷粒商城笔记合集
三、基础环境搭建
3.1 安装 linux虚拟机-注意未采用
下载&安装 VirtualBox https://www.virtualbox.org/ 要开启 CPU 虚拟化
CPU 查看
下载& 安装 Vagrant
https://app.vagrantup.com/boxes/search Vagrant 官方镜像仓库
https://www.vagrantup.com/downloads.html Vagrant下载
打开window cmd窗口,运行Vagrant init centos/7 ,即可初始化一个centos系统
运行vagrant up即可启动虚拟机。系统root用户的密码是vagrant
vagrant其他常用命令
vagrant ssh 自动使用 vagrant 用户连接虚拟机
vagrant upload source [destination] [name|id] 上传文件
https://www.vagrantup.com/docs/cli/init.html Vagrant 命令行
默认虚拟机的ip 地址不是固定ip 开发不方便
Vagrant 和 VirtualBox 版本有对应问题 都安装最新版本 则安装成功
修改 Vagrantfile
config.vm.network “private_network”, ip: “192.168.56.10”
这里 ip 需要在 物理机下使用 ipconfig 命令找到
3.2 安装 docker
CentOS7安装Docker:官网链接
-
确定你是CentOS7及以上版本:cat /etc/redhat-release
[root@tencent ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core)
-
卸载旧版本
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
确定能上外网
-
yum安装gcc相关
[root@tencent ~]# yum -y install gcc Loaded plugins: fastestmirror, langpacks Determining fastest mirrors epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 os | 3.6 kB 00:00:00 updates | 2.9 kB 00:00:00 updates/7/x86_64/primary_db | 19 MB 00:00:01 Package gcc-4.8.5-44.el7.x86_64 already installed and latest version Nothing to do [root@tencent ~]# yum -y install gcc-c++ Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Package gcc-c++-4.8.5-44.el7.x86_64 already installed and latest version Nothing to do
-
安装方式:选择第一种
-
安装需要的软件包
[root@tencent ~]# yum install -y yum-utils Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile Package yum-utils-1.1.31-54.el7_8.noarch already installed and latest version Nothing to do
-
设置stable镜像仓库:阿里云镜像仓库
[root@tencent ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo Loaded plugins: fastestmirror, langpacks adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo repo saved to /etc/yum.repos.d/docker-ce.repo
-
更新yum软件包索引
[root@tencent ~]# yum makecache fast Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile docker-ce-stable | 3.5 kB 00:00:00 epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 os | 3.6 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/2): docker-ce-stable/7/x86_64/updateinfo | 55 B 00:00:00 (2/2): docker-ce-stable/7/x86_64/primary_db | 91 kB 00:00:00 Metadata Cache Created
-
安装 DOCKER CE
[root@tencent ~]# sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile ... Complete!
-
启动docker并设置开机自启动
[root@tencent ~]# systemctl start docker [root@tencent ~]# systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
-
设置阿里云镜像加速
[root@tencent ~]# mkdir -p /etc/docker [root@tencent ~]# tee /etc/docker/daemon.json <<-'EOF' > { > "registry-mirrors": ["https://kmz7kscl.mirror.aliyuncs.com"] > } > EOF { "registry-mirrors": ["https://kmz7kscl.mirror.aliyuncs.com"] } [root@tencent ~]# systemctl daemon-reload [root@tencent ~]# systemctl restart docker
3.3 docker 安装 mysql
-
修改云服务器安全组开放对应端口、关闭云服务器内部防火墙(systemctl stop firewalld)
-
下载镜像文件
[root@tencent ~]# docker pull mysql:5.7 5.7: Pulling from library/mysql 72a69066d2fe: Pull complete ... Status: Downloaded newer image for mysql:5.7 docker.io/library/mysql:5.7
-
创建容器实例
[root@tencent ~]# docker run -d -p 3306:3306 --restart=always -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=bilimall --name mysql mysql:5.7 81dcdad406cae27068e537854c4ea1b239ebeb703e334b22f8c298c0aa3b3cbc
-
在宿主机目录 /mydata/mysql/conf/ 中创建并修改配置文件 my.cnf
[root@tencent ~]# vim /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
-
重启容器
[root@tencent ~]# docker restart mysql mysql
-
连接mysql
3.4 docker 安装 redis
-
修改云服务器安全组开放对应端口、关闭云服务器内部防火墙(systemctl stop firewalld)
-
下载镜像文件
[root@tencent ~]# docker pull redis:6.2.1 6.2.1: Pulling from library/redis f7ec5a41d630: Pull complete ... Status: Downloaded newer image for redis:6.2.1 docker.io/library/redis:6.2.1
-
创建挂载目录 /mydata/redis/conf/ ,创建并编写配置文件 redis.conf
[root@tencent ~]# mkdir -p /mydata/redis/conf/ #复制官网6.2配置文件 [root@tencent ~]# vim /mydata/redis/conf/redis.conf 注释:bind 127.0.0.1 -::1 #所有ip可连接 修改:dir /data #持久化文件存储位置 修改:requirepass bilimall #密码 修改:appendonly yes #开启aof持久化
-
创建容器实例
[root@tencent ~]# docker run -d -p 6379:6379 --restart=always -v /mydata/redis/data:/data -v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf --name redis redis:6.2.1 redis-server /etc/redis/redis.conf f1686b09c37f2ea46313a07a01a126c36ea0946c7254a4c3e27e4beebafe4e0d
-
连接redis
3.5 开发环境统一
3.5.1 Maven下载安装
-
maven下载
-
配置阿里云镜像
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorOf> <name>Nexus aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </mirror> </mirrors>
-
配置编译阶段的jdk版本
<profiles> <profile> <id>jdk-1.8</id> <activation> <activeByDefault>true</activeByDefault> <jdk>1.8</jdk> </activation> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion> </properties> </profile> </profiles>
3.5.2 idea&VsCode
-
IDEA集成Maven
-
IDEA 安装 lombok、mybatisx 插件、gitee 插件
-
下载VsCode
- 官网
- 官网
-
安装VsCode
-
VsCode安装插件
-
Auto Close Tag:自动闭合HTML/XML标签
-
Auto Rename Tag:自动完成另一侧标签的同步修改
-
Chinese(Simplified)
-
ESLint:语法纠错
-
配置 setting.json
打开 VSCode 左上角文件-首选项-设置,在设置中搜索eslint,点击并翻页到最下面,点击setting.json进行配置并保存:
{ "workbench.colorTheme": "Visual Studio Dark", // 值设置为true时,每次保存的时候自动格式化;值设置为false时,代码格式化请按shift+alt+F "editor.formatOnSave": true, // 每次保存的时候将代码按eslint格式进行修复: "eslint.validate": [ "javascript", "javascriptreact", "html", "vue" ], "eslint.enable": true, "eslint.run": "onType", "eslint.options": { "extensions": [ "js", "vue", ".jsx", ".tsx" ] }, "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, "eslint.format.enable": true, "eslint.lintTask.enable": true, "[vue]": { "editor.defaultFormatter": "dbaeumer.vscode-eslint" }, }
-
在任意文件:鼠标右键->使用…格式化文档->配置默认格式程序->选择eslint
这样之后 alt+Shift+f 之后就是按照 eslint 规则保存
-
-
HTML CSS Support:让 html 标签上写class 智能提示当前项目所支持的样式
-
HTML Snippets
-
JavaScript(ES6):ES6 语法智能提示以及快速输入,除j外还支持.ts, .jsx, .tsx, .html, .vue;省去了配置其支持各种包含is代码文件的时间
-
Live server:修改页面并保存页面实时更新
-
open in browser:直接右键项目单击启动
-
Vetur:语法高亮,智能感知 包含格式化功能,Alt+Shift+F (格式化全文) ,Ctrl+K Ctrl+F (格式化选中代码,两个Ctrl需要同时按着)
-
Vue 2 Snippets:vue语法提示
-
-
重启VsCode
3.5.3 安装配置 git
-
注册gitee账号
-
下载安装git客户端:官网
-
配置用户名、邮箱
# 配置用户名 git config --global user.name “李泽伟” # 配置邮箱 git config --global user.email "Lizewei2105@163.com"
-
配置 ssh 免密登录
-
生成密钥对,查看gon公钥
#生成密钥对 $ ssh-keygen -t rsa -C "Lizewei2105@163.com" #查看公钥 $ cat ~/.ssh/id_rsa.pub
-
登录 gitee 设置 SSH KEY
-
测试是否配置成功
$ ssh -T git@gitee.com Hi 李泽伟! You've successfully authenticated, but GITEE.COM does not provide shell access.
-
-
配置指令别名、GitBash乱码问题、忽略文件
-
IDEA 集成 Git
3.6 初始化项目结构
3.6.1 gitee初始化项目
-
新建仓库
-
将仓库设置为开源
-
从 gitee 克隆项目到IDEA
3.6.2 创建微服务
商品服务、仓储服务、订单服务、优惠卷服务、用户服务
- 都导入依赖:Spring Web、OpenFeign
- 包名格式:cn.lzwei.bilimall.xxx(product、ware、order、coupon、member)
- 模块名称格式:bilimall-xxx(product、ware、order、coupon、member)
创建子模块示例
-
注意修改 Spring Boot 版本:2.1.8.RELEASE
注意:springboot 2.1.8.RELEASE 只支持使用 jdk8、jdk9 进行编译
3.6.3 聚合微服务
-
在父项目下创建 pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cn.lzwei.bilimall</groupId> <artifactId>bilimall</artifactId> <version>0.0.1-SNAPSHOT</version> <name>bilimall</name> <description>聚合服务</description> <packaging>pom</packaging> <modules> <module>bilimall-product</module> <module>bilimall-ware</module> <module>bilimall-order</module> <module>bilimall-coupon</module> <module>bilimall-member</module> </modules> </project>
-
将父pom添加到IDEA中进行管理
-
修改父工程的 .gitignore 文件
target/ pom.xml.tag pom.xml.releaseBackup pom.xml.versionsBackup pom.xml.next release.properties dependency-reduced-pom.xml buildNumber.properties .mvn/timing.properties # https://github.com/takari/maven-wrapper#usage-without-binary-jar .mvn/wrapper/maven-wrapper.jar #添加以下内容 .idea **/mvnw **/mvnw.cmd **/*.iml **/HELP.md **/.mvn **/target **/.gitignore
3.6.4 提交并推送
-
将未被版本控制的文件添加到版本控制中
-
提交修改
-
推送到远程
-
推送成功
3.6.5 数据库搭建
-
连接 mysql 服务
-
为每个微服务创建数据库:bilimall_pms(商品)、bilimall_wms(仓储)、bilimall_oms(订单)、bilimall_sms(优惠卷)、bilimall_ums(用户)
-
使用 sql 脚本为每个数据库创建表:以 bilimall_pms(商品数据库)为例
3.7 管理系统
3.7.1 管理系统后端搭建
-
克隆 gitee人人开源 renren-fast项目,并删除项目中 .git文件:地址
-
将项目复制到 bilimall工程下,并将项目添加到 bilimall工程中
-
在mysql服务中创建数据库 bilimall_admin,并使用脚本文件创建表
-
修改项目中使用的数据源,并启动服务
3.7.2 管理系统前端搭建
-
克隆 gitee人人开源 renren-fast-vue 项目,并删除项目中 .git文件
-
使用 VsCode 打开项目
-
下载安装 Node.js:注意教程使用的版本是 10.16.3,下载地址
-
重新安装 npm:注意与 Node.js 对应版本为 6.9.0
-
下载安装 npm
PS F:\software\VsCode\Projects\renren-fast-vue> npm install npm@6.9.0 -g
-
配置npm使用淘宝镜像
PS F:\software\VsCode\Projects\renren-fast-vue> npm config set registry http://registry.npm.taobao.org/
-
-
下载安装 python-2.7.15:下载地址
- 在安装程序中建议选择自动配置环境变量
-
下载安装 visual studio:下载地址
-
打开终端控制台,下载依赖
PS F:\software\VsCode\Projects\renren-fast-vue> npm install
-
运行项目
PS F:\software\VsCode\Projects\renren-fast-vue> npm run dev
3.7.3 系统使用
使用浏览器访问:http://localhost:8001
登录账号:admin、登录密码:admin
3.8 逆向工程
3.8.1 逆向工程搭建
以商品服务为例
-
克隆 gitee人人开源 renren-generator 项目,并删除项目中 .git文件:地址
-
将项目复制到 bilimall工程下,并将项目添加到 bilimall工程中
-
修改项目数据源(需要逆向生成CRUD代码的数据库地址)
-
修改项目配置文件:配置生成的包名、作者等,指定表前缀…
-
修改controller代码模板:注释所有shiro的相关注解、删除包导入
-
启动服务,使用浏览器登录:http://localhost:80
3.8.2 代码生成
以商品服务为例
-
生成代码
-
解压并将 src文件夹 拷贝到对应的微服务中:删除 resources目录下 的src文件夹
3.8.3 公共服务搭建
-
创建模块
-
导入公共依赖
<dependencies> <!-- Mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency> <!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency> <!-- Lombok --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency> <!-- Http请求 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> <version>4.4.12</version> </dependency> <!-- apache工具包 --> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <!-- servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> </dependencies>
-
拷贝 renren-generator 、renren-fast 项目中的工具类,添加描述信息
注意:renren-generator 项目版本不同生成的代码不同,需要的工具类也会有所不同,请根据实况进行调整
3.8.4 代码整合
以商品服务为例
3.9 整合MybatisPlus
以商品服务为例
3.9.1 配置环境
1)导入依赖
-
在 bilimall-common 中导入依赖
官网链接
<!-- Mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency>
2)配置数据源
以商品服务为例
-
在 bilimall-common 中导入数据库驱动:驱动与mysql版本的对应说明
<!-- mysql驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.17</version> </dependency>
-
在 bilimall-product 中创建配置文件来配置数据源相关信息:application.yml
spring: datasource: username: root password: bilimall url: jdbc:mysql://114.132.162.129:3306/bilimall_pms?useUnicode=true&characterEncoding=utf-8&useSSL=false driver-class-name: com.mysql.cj.jdbc.Driver
3)配置MybatisPlus
以商品服务为例
-
根据需要在主启动类添加事务启动注解:@EnableTransactionManagement
-
在 bilimall-product 的主启动类中配置包扫描
@MapperScan("cn.lzwei.bilimall.product.dao")
-
在 bilimall-product 的配置文件中配置 sql 映射文件的位置 和 主键自增:application.yml
mybatis-plus: # mapper文件扫描:不仅扫描我的类路径,还包括依赖的其他类路径 mapper-locations: classpath*:/mapper/**/*.xml global-config: db-config: id-type: auto # 数据库主键自增
3.9.2 测试
以商品服务为例
-
修改 bilimall-product 的测试启动类:BilimallProductApplicationTests
@RunWith(SpringRunner.class) @SpringBootTest public class BilimallProductApplicationTests { @Resource BrandService brandService; @Test public void contextLoads() { BrandEntity brandEntity = new BrandEntity(); brandEntity.setBrandId(1L); brandEntity.setName("华为"); brandService.save(brandEntity); } }
-
启动测试程序
3.9.3 分页配置
@Configuration // 声明配置类
@EnableTransactionManagement // 开启事务注解
@MapperScan("com.atguigu.gulimall.product.dao") // 指定扫描包
public class MyBatisConfig {
/**
* 引入分页插件 拦截器
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
paginationInterceptor.setOverflow(true);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
paginationInterceptor.setLimit(1000);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
}
3.9.4 逻辑删除
说明:
只对自动注入的sql起效:
- 插入: 不作限制
- 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 删除: 转变为 更新
例如:
- 删除:
update user set deleted=1 where id = 1 and deleted=0
- 查找:
select id,name,deleted from user where deleted=0
步骤1:配置 application.yml
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
global-config:
db-config:
id-type: auto # 数据库主键自增
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
步骤2: 实体类字段上加上
@TableLogic
注解
/**
* 是否显示[0-不显示,1显示]
*/
@TableLogic(value = "1",delval = "0")
private Integer showStatus;
3.10 所有微服务逆向生成
逆向生成其他服务的代码
-
使用逆向工程生成代码
-
代码整合:将生成的代码整合到对应微服务,引入公共服务
-
创建配置文件 application.yaml 进行相关配置:配置数据源整合MybatisPlus,配置 端口号
-
在主启动类中配置包扫描:@MapperScan(“cn.lzwei.bilimall.xxx.dao”)
-
启动所有服务并测试接口