HM-SpringCloud微服务系列11.1.2【案例导入】
启动docker服务:
systemctl start docker
2.1 导入商品管理案例
2.1.1 安装MySQL
后期做数据同步需要用到MySQL的主从功能,所以需要大家在虚拟机中,利用Docker来运行一个MySQL容器(新的,防止与其他环境干扰)。
CentOS虚拟机Docker安装MySQL
本地Navicat远程连接虚拟机中的MySQL数据库
- 为了方便后期配置MySQL,我们先准备两个目录,用于挂载容器的数据和配置文件目录:
# 进入/tmp目录 cd /tmp # 创建文件夹 mkdir mysql # 进入mysql目录 cd mysql
- 进入mysql目录后,执行下面的Docker命令:
docker run \ -p 3306:3306 \ --name mysql \ -v $PWD/conf:/etc/mysql/conf.d \ -v $PWD/logs:/logs \ -v $PWD/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123 \ --privileged \ -d \ mysql:5.7.25
- 在/tmp/mysql/conf目录添加一个my.cnf文件,作为mysql的配置文件:
文件内容:# 创建文件 touch /tmp/mysql/conf/my.cnf
[mysqld] skip-name-resolve character_set_server=utf8 datadir=/var/lib/mysql server-id=1000
- 配置修改后,必须重启容器:
docker restart mysql
2.1.2 导入SQL
- 导入课前资料提供的item.sql文件:
- 其中包含两张表:
- tb_item:商品表,包含商品的基本信息
- tb_item_stock:商品库存表,包含商品的库存信息
- 之所以将库存分离出来,是因为库存是更新比较频繁的信息,写操作较多。而其他信息修改的频率非常低。
2.1.3 导入Demo工程
- 导入课前资料提供的工程item-service
- 其中的业务包括(在
com.heima.item.web
包的ItemController
中可以看到以下接口):- 分页查询商品
- 新增商品
- 修改商品
- 修改库存
- 删除商品(这里是采用了逻辑删除,将商品状态修改为3)
- 根据id查询商品(这里只返回了商品信息,不包含库存)
- 根据id查询库存
- 分页查询商品
- 业务全部使用mybatis-plus来实现,如有需要请自行修改业务逻辑。
- 修改配置,启动测试
访问http://localhost:8081/item/10001查询数据
2.1.4 导入商品查询页面
- 商品查询是购物页面,与商品管理的页面是分离的。部署方式如图:
- 我们需要准备一个反向代理的nginx服务器,如上图红框所示,将静态的商品页面放到nginx目录中。
- 页面需要的数据通过ajax向服务端(nginx业务集群)查询。
【第一步:运行nginx服务】
找到课前资料的nginx目录,将其拷贝到一个非中文目录下,start nginx.exe
运行这个nginx服务
访问http://localhost/item.html?id=10001测试
【第二步:配置反向代理】
现在,页面是假数据展示的。我们需要向服务器发送ajax请求,查询商品数据。
打开控制台,可以看到页面有发起ajax查询数据:
而这个请求地址同样是80端口,所以被当前的nginx反向代理了。
查看nginx的conf目录下的nginx.conf文件:
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
# nginx的业务集群
upstream nginx-cluster{
server 10.193.193.141:8081;
# server 10.193.193.141:8082;
}
server {
listen 80;
server_name localhost;
location /api {
proxy_pass http://nginx-cluster;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}