第二篇商城系统-工欲善其事必先利其器-环境准备
Posted 波波烤鸭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第二篇商城系统-工欲善其事必先利其器-环境准备相关的知识,希望对你有一定的参考价值。
系统环境准备
商城系统涉及到的环境比较复杂,第三方的组件我们会统一通过Docker来安装。简化学习的难度。同时也要求大家要熟练运用Docker的相关命令。不清楚的可以在波哥讲解的:https://space.bilibili.com/435498550/search/video?keyword=Docker 视频中补充下
1.虚拟机环境
我们可以通过VMWare来安装,但是通过VMWare安装大家经常会碰到网络ip连接问题,为了减少额外的环境因素影响,Docker内容的讲解我们会通过VirtualBox结合Vagrant来安装虚拟机。
VirtualBox官网:https://www.virtualbox.org/
Vagrant官网:https://www.vagrantup.com/
Vagrant镜像仓库:https://app.vagrantup.com/boxes/search
安装VirtualBox和Vagrant,傻瓜式安装。安装完成后需要重启计算机。
在cmd命令窗口输入 vagrant
命令弹出如下内容表示 vagrant
安装成功
通过Vagrant安装虚拟机:
- 创建一个空的目录,cmd切换到该目录中,然后执行
vagrant init centos/7
会创建Vagrantfile文件 - 执行
vagrant up
第一次执行的时候会远程下相关的镜像文件,并启动虚拟机。 - 连接虚拟机通过
vagrant ssh
连接
网络配置:
找到对应的Vagrantfile文件
查看当前主机给虚拟机分配的网关的网段:
所以修改后的ip为:192.168.56.10
重启测试:需要提供私钥
私钥地址:
搞定
2.Docker环境
参考官方文档安装:https://docs.docker.com/engine/install/centos/
卸载原有的环境:
sudo yum remove docker \\
docker-client \\
docker-client-latest \\
docker-common \\
docker-latest \\
docker-latest-logrotate \\
docker-logrotate \\
docker-engine
安装对应的依赖环境和镜像地址
sudo yum install -y yum-utils
sudo yum-config-manager \\
--add-repo \\
https://download.docker.com/linux/centos/docker-ce.repo
安装过慢设置镜像
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
直接安装docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
表示安装成功
启动docker服务
sudo systemctl start docker
查看docker的版本
sudo docker version
补充:通过官方的镜像地址下载docker会比较慢,
配置阿里云的镜像地址:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum更新下即可:
yum makecache fast
开机启动docker
sudo systemctl enable docker
3.基本软件安装
3.1 mysql数据库安装
项目软件统一安装在 /mydata
目录下
docker拉取镜像命令
docker pull mysql:5.7
docker安装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 mysql:5.7
修改MySQL的配置文件 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
3.2 Redis安装
拉取Redis最新版本镜像
docker pull redis
先创建对应的Redis的映射配置文件
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
创建容器命令
docker run -d -p 6379:6379 --name mall-redis -v /mydata/redis/data:/data -v /mydata/redis/conf:/etc/redis redis redis-server /etc/redis/redis.conf
启动后测试连接:
[root@manager-node conf]# docker exec -it 4e redis-cli
127.0.0.1:6379> keys *
(empty array)
127.0.0.1:6379>
更新redis配置文件:见课程附件
设置容器自启动
[root@localhost ~]# docker update --restart=always mysql
mysql
[root@localhost ~]# docker update --restart=always mall-redis
mall-redis
4.开发环境
4.1 环境版本
JDK环境
开发工具:IDEA2021 VSCode
4.2 Git安装
配置信息
git config --global user.name "bobo"
git config --global user.email "dengpbs@163.com"
关联Gitee码云
ssh-keygen -t rsa -C "dengpbs@163.com"
生成对应的公钥和私钥,在用户目录下
$ ssh-keygen -t rsa -C "dengpbs@163.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/dpb/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/dpb/.ssh/id_rsa
Your public key has been saved in /c/Users/dpb/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:O+fr8mOR1GSB0GHJXS5s3ZYbq3qX9vvkCq4immGzCv8 dengpbs@163.com
The key's randomart image is:
+---[RSA 3072]----+
| .+o=.o. |
| .=.+o ..|
| ++ ooo|
| .... .+|
| S. . o |
| .o . |
|. + o .... o|
| o . =. o+o..o * |
| ooE. . **=o +oB|
+----[SHA256]-----+
然后把公钥中的内容复制到码云中去
保存即可
然后通过 ssh -T git@gitee.com
来连接测试
dpb@DESKTOP-NM4KFCE MINGW64 /d/desktop
$ ssh -T git@gitee.com
The authenticity of host 'gitee.com (180.97.125.228)' can't be established.
ED25519 key fingerprint is SHA256:+ULzij2u99B9eWYFTw1Q4ErYG/aepHLbu96PAUCoV88.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'gitee.com' (ED25519) to the list of known hosts.
Hi 邓澎波! You've successfully authenticated, but GITEE.COM does not provide shell access.
4.3 后台服务创建
4.3.1 码云创建基本项目
在码云上创建整个聚合工程的父工程,创建一个新的仓库
设置仓库的相关信息
创建完成
4.3.2 IDEA关联
创建的父工程项目导入到IDEA中,两种方式,第一个是直接下载后导入,第二个是通过IDEA直接克隆
首先在IDEA中下载gitee的插件
然后我们需要登录
clone操作
克隆成功的项目
4.3.3 创建微服务
我们首先创建几个基础的微服务(商品,订单,会员,库存,活动)
创建商品模块
对应的项目信息
关联对应的依赖:web和OpenFegin的依赖
按照相同的步骤完成其他几个模块的创建
这是一个聚合工程,那么我们需要在父工程中完成对应的设置,去任意一个项目中拷贝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>com.msb.mall</groupId>
<artifactId>mall-ware</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mall-ware</name>
<description>波哥商城项目-聚合工程</description>
<packaging>pom</packaging>
<modules>
<module>mall-ware</module>
<module>mall-member</module>
<module>mall-coupon</module>
<module>mall-order</module>
<module>mall-producet</module>
</modules>
</project>
然后完成maven项目的配置
然后可以通过父工程来统一管理
4.3.4 版本忽略信息
4.3.5 提交微服务到码云
commit
弹出检查窗口,直接提交
提交到了码云服务中
4.3.6 微服务相关表结构
维护微服务相关的数据库表结构,首先创建对应的5个数据库
然后创建相关的表结构。将对应提供的sql脚本文件运行即可
4.4 后台管理系统搭建
前端:Vue+ElementUI
后端:SpringBoot+MyBatisPlus+SpringMVC
我们在本项目中会通过人人开源中提供的模板项目来快速的实现项目的构建:https://gitee.com/renrenio
4.4.1 后端项目
下载下来的renren-fast解压后拷贝到项目的父工程的根目录下
修改人人-fast相关的数据库配置信息,查看数据库的连接信息,并修改
然后创建对应的数据库,名称为 renren_fast
同步更新对应的账号密码
然后跟进renren-fast中提供的sql脚本,创建对应的表结构
项目java版本5的调整
有可能设置失效多检查下,把其他数据库的驱动依赖注销掉。
然后将renren-fast的代码提交到码云中
4.4.2 前端服务
将下载的renren-fast-vue 项目解压出来后放置在对应的目录下
通过VSCode来作为前端项目的开发工具,对应安装相关的插件
前提必须自己安装node.js
Vue项目的开始与安装:https://github.com/renrenio/renren-fast-vue/wiki/Getting-started
设置代理镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
初始化
cnpm install
安装中如果出现了sass错误提示
那么通过
cnpm install --save node-sass
然后通过
npm run dev
启动成功
访问的页面
管理页面信息
4.4.3 generator项目
导入人人-generator项目,来实现快速生成相关的模板代码。
调整对应的数据库的配置
设置生成的模板文件相关的基础信息
启动项目,生成对应的模板代码,启动后的项目的端口 80
点击生成
4.4.4 商品系统调试
首先把生成的相关的模板文件拷贝到商品模块中。然后我们会发现代码有相关的错误提示,原因是缺少了renren-fast中的相关的依赖
针对这个情况,我们可以创建一个commons模块来存放所有的微服务需要的公共内容
创建的项目我们需要添加的依赖
<dependencies>
<!-- 引入MyBatisPlus的依赖 -->
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.4.3.4</version>
</dependency>
<!-- 添加lombok的依赖 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.14</version>
</dependency>
</dependencies>
需要添加的工具类
lombok插件安装
最后我们在product项目中引入commons的依赖
4.4.5 MyBatisPlus整合
需要添加相关的MyBatisPlus的依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<!-- mysql依赖 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
然后完成mybatisPlus的相关配置
数据库的相关连接信息配置
# 数据库的连接新
spring:
datasource:
username: root
password: root
url: jdbc:mysql://192.168.56.100:3306/mall-pms
driver-class-name: com.mysql.cj.jdbc.Driver
制定Mapper接口的路径
@SpringBootApplication
// 指定Mapper接口对应的路径
@MapperScan("com.msb.mall.product.dao")
public class MallProducetApplication
public static void main(String[] args)
SpringApplication.run(MallProducetApplication.class, args);
还需要制定Mapper映射文件的路径
mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml
global-config:
db-config:
id-type: auto # 主键自增
测试
@SpringBootTest(classes = MallProducetApplication.class)
class MallProducetApplicationTests
@Autowired
BrandService brandService;
@Test
void contextLoads()
BrandEntity entity = new BrandEntity();
entity.setName("魅族");
brandService.save(entity);
@Test
void selectAll()
List<BrandEntity> list = brandService.list();
for (BrandEntity entity : list)
System.out.println(entity);
@Test
void selectById()
List<BrandEntity> list = brandService
.list(new QueryWrapper<BrandEntity>().eq("brand_id",2));
for (BrandEntity entity : list)
System.out.println(entity);
4.4.6 生成其他模块代码
通过generator代码生成其他模块的代码
但同时也会因为没有依赖commons项目所有有报错,那么每个微服务我们都让其依赖commons项目,然后每个项目都需要整合MyBatisPlus,按照product模块的方式实现即可。
然后分别给每个服务设置对应的端口
能正常运行那么说明微服务中的各个生成的模板代码没有问题。搞定!
5.微服务环境
在SpringCloud出现之前,微服务架构我们也能够解决。但是选择五花八门,比较乱,针对这种情况,SpringCloud整合一套微服务的解决方案。
SpringCloud生态提供了快速构建微服务的技术组件。https://spring.io/projects/spring-cloud-netflix
版本 关键词描述
- SR (发行版)
- RC (后续发行版本)
- M1/M2(PRE) 里程碑
- GA 稳定版
- BUILD-XXX 开发版
SpringCloud和SpringBoot的关联关系
大版本对应:
Spring Cloud | Spring Boot |
---|---|
Angel版本 | 兼容Spring Boot 1.2.x |
Brixton版本 | 兼容Spring Boot 1.3.x,也兼容Spring Boot 1.4.x |
Camden版本 | 兼容Spring Boot 1.4.x,也兼容Spring Boot 1.5.x |
Dalston版本、Edgware版本 | 兼容Spring Boot 1.5.x,不兼容Spring Boot 2.0.x |
Finchley版本 | 兼容Spring Boot 2.0.x,不兼容Spring Boot 1.5.x |
Greenwich版本 | 兼容Spring Boot 2.1.x |
Hoxtonl版本 | 兼容Spring Boot 2.2.x |
在实际开发过程中,我们需要更详细的版本对应:
Spring Boot | Spring Cloud |
---|---|
1.5.2.RELEASE | Dalston.RC1 |
1.5.9.RELEASE | Edgware.RELEASE |
2.0.2.RELEASE | Finchley.BUILD-SNAPSHOT |
2.0.3.RELEASE | Finchley.RELEASE |
2.1.0.RELEASE-2.1.14.RELEASE | Greenwich.SR5 |
2.2.0.M4 | Hoxton.SR4 |
SpringCloud版本是和SpringBoot有关联关系的,官网中可以查看:https://docs.spring.io/spring-cloud/docs/current/reference/html/
5.1 SpringCloudAlibaba介绍
SpringCloudAlibaba GitHub地址:https://github.com/alibaba/spring-cloud-alibaba/
中文网站对应的地址:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
- 注册中心:Nacos
- 配置中心:Nacos
- 负载均衡:Ribbon
- 声明式服务调用:OpenFegin
- 服务容错:Sentinel
- 网关服务:Gateway
- 链路监控:Sleuth
- 分布式事务:Seata
SpringCloudAlibaba和SpringBoot的对应版本
针对于SpringCloudAlibaba的版本关系,我们需要调整SpringBoot和SpringCloud的版本
然后我们在commons服务中设置SpringCloudAlibaba的依赖管理
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
5.2 Nacos注册中心
5.2.1 Nacos服务搭建
我们首先在Nacos的GitHub中下载相关的安装文件。https://github.com/alibaba/nacos/releases
但是因为服务器在国外,所以我们直接给大家提供了对应的安装文件。直接解压缩到非中文的目录下,然后启动即可
服务访问的地址是:http://localhost:8848/nacos
5.2.2 Nacos服务注册
引入相关的依赖文件:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
放开注册中心:@EnableDiscoveryClient
// 放开注册中心
@EnableDiscoveryClient
@SpringBootApplication
// 指定Mapper接口对应的路径
@MapperScan("com.msb.mall.product.dao")
public class MallProducetApplication
public static void main(String[] args)
SpringApplication.run(MallProducetApplication.class, args);
然后需要在配置问中配置注册中心的相关信息
然后重启服务,我们就可以在注册中心中发现对应的服务注册信息了
那么安装相同的步骤,完成其他几个微服务的注册
5.2.3 Nacos容器中安装
为了使用的方便,我们将Nacos安装到Docker容器中
首先我们需要拉取对应的镜像文件
docker pull nacos/nacos-server:1.4.2
通过镜像文件运行nacos容器
docker run -d --env MODE=standalone --name nacos -v /mydata/nacos/conf:/home/nacos/conf -p 8848:8848 nacos/nacos-server:1.4.2
安装中如果出现了如下的提示
那么就把windows中的安装文件中的conf目录的文件上传到虚拟机中
服务启动时间比较长,耐心等待一会
启动容器后,测试访问:
http://192.168.56.100:8848/nacos 默认的账号密码:nacos nacos
设置nacos服务自启动
docker update --restart=always nacos
然后将众多的微服务的注册中心地址修改为docker容器中的注册中心地址:
看到注册信息就表示操作成功了
5.3 OpenFegin服务调用
OpenFegin是一个声明式的服务调用组件。本质上是封装的Ribbon实现的。
5.3.1 商品服务定义接口
我们在商品服务中定义一个对外提供功能的接口
5.3.2 订单服务中调用
我们在订单服务中集成OpenFegin,完成对应的商品服务调用
引入相关的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
然后创建对应的Fegin接口
/**
* @FeignClient 指明我们要从注册中心中发现的服务的名称
*/
@FeignClient(name = "mall-product")
public interface ProductService
/**
* 需要访问的远程方法
* @return
*/
@GetMapping("/product/brand/all")
public R queryAllBrand();
还需要在启动类中开启远程调用
/**
* basePackages 制定Fegin接口的路径
*/
@EnableFeignClients(basePackages = "com.msb.mall.order.fegin")
@EnableDiscoveryClient
@SpringBootApplication
@MapperScan("com.msb.mall.order.dao")
public class MallOrderApplication
public static void main(String[] args)
SpringApplication.run(MallOrderApplication.class, args);
然后在Order的控制期中完成商品服务的调用
@Autowired
ProductService productService;
@GetMapping("/products")
public R queryProduct()
// OpenFegin 远程调用服务
return R.ok().put("products",productService.queryAllBrand());
启动服务报错
然后就把相关的依赖添加上就可以了
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
通过@RefreshScope来动态的刷新配置数据,注解的位置写在Controller中
最后我们通过@Value(“#”) 来获取配置中心中的数据,配置中心的数据优先于application.yml中的属性信息
在对应的命名空间下创建对应的配置文件
cocos2d-x之android编译环境搭建(第二篇)[版本号:cocos2d-x-3.1.1]