Overview
参考:
班级管理系统:
该项目是学习微服务时的一个demo项目,只具备后端功能,且因为服务的功能和代码极其相似,最后两个服务没有开发完成。文档尽可能事无巨细地记录整个开发过程,方便未来查阅。
Github源码
🔗: https://github.com/zewei94yomi/clazz-web-parent
技术选型
数据库:MySQL
持久化:Mybatis
后端:SpringBoot + SpringCloud
注册中心:Consul
服务间通信:openfeign
API测试:Postman
0. How to run
-
安装consul,并启动(运行命令):
consul agent -dev
-
启动
clazz-gateway
项目,访问http://localhost:8500,即可看到consul的可视化界面 -
启动需要的服务的项目,如
clazz-city
,在consul的界面查看服务是否注册成功 -
使用Postman测试API
1. Setup
创建maven项目
0. 分析
基于现有业务进行服务拆分:
- city 服务
- tag 服务
- class 服务
- group 服务
- student 服务
- gateway 服务(微服务项目才有)
库表设计(班级管理系统):
城市表 city 单表
标签表 tag 单表
班级表 clazz tagId外键
小组表 group clazzId 外键
学生表 student cityId 外键 clazzid外键 groupid外键
关系表 学生标签关系表 student_tag sid tid
项目要求:“整个系统中全部使用单表进行查询”
- 服务网关 = 路由转发 + 过滤器(在服务网关中可以完成一系列的横切功能,例如权限校验、限流以及监控等)
- 为什么需要服务网关?
- 代码开发不会冗余
- 将权限校验的逻辑写在网关的过滤器中,后端服务不需要关注权限校验的代码,所以服务的jar包中也不会引入权限校验的逻辑,不会增加jar包大小
- 如果想修改权限校验的逻辑,只需要修改网关中的权限校验过滤器即可,而不需要升级所有已存在的微服务
1. 库表入库
创建clazz-web库
name: clazz-web
character set: utf8mb4
collation: utf8mb4_bin
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 50718
Source Host : localhost:3306
Source Schema : baizhi_sys
Target Server Type : MySQL
Target Server Version : 50718
File Encoding : 65001
Date: 31/05/2021 20:24:06
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_city
-- ----------------------------
DROP TABLE IF EXISTS `city`;
CREATE TABLE `city` (
`id` int(40) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_city
-- ----------------------------
BEGIN;
INSERT INTO `city` VALUES (4, '北京');
INSERT INTO `city` VALUES (5, '南京');
INSERT INTO `city` VALUES (6, '天津');
INSERT INTO `city` VALUES (7, '杭州');
INSERT INTO `city` VALUES (8, '上海');
INSERT INTO `city` VALUES (9, '深圳');
INSERT INTO `city` VALUES (11, '福建');
INSERT INTO `city` VALUES (12, '郑州');
INSERT INTO `city` VALUES (13, '云南');
INSERT INTO `city` VALUES (15, '辽宁');
COMMIT;
-- ----------------------------
-- Table structure for t_clazz
-- ----------------------------
DROP TABLE IF EXISTS `clazz`;
CREATE TABLE `clazz` (
`id` int(40) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
`path` varchar(300) DEFAULT NULL,
`tagId` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_clazz
-- ----------------------------
BEGIN;
INSERT INTO `clazz` VALUES (10, '2010班', '/20210531170642.png', '13');
INSERT INTO `clazz` VALUES (11, '2011班', '/20210531170831.png', '14');
INSERT INTO `clazz` VALUES (12, '2012班', '/20210531170842.png', '5');
INSERT INTO `clazz` VALUES (13, '2013班', '/20210531170853.png', '5');
COMMIT;
-- ----------------------------
-- Table structure for t_group
-- ----------------------------
DROP TABLE IF EXISTS `group`;
CREATE TABLE `group` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
`createDate` date DEFAULT NULL,
`clazzId` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_group
-- ----------------------------
BEGIN;
INSERT INTO `group` VALUES (5, '1组', '2021-05-31', '11');
INSERT INTO `group` VALUES (6, '2组', '2021-05-31', '10');
INSERT INTO `group` VALUES (7, '1组', '2021-05-31', '10');
INSERT INTO `group` VALUES (8, '2组', '2021-05-31', '11');
INSERT INTO `group` VALUES (9, '3组', '2021-05-31', '11');
COMMIT;
-- ----------------------------
-- Table structure for t_student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(40) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
`age` int(3) DEFAULT NULL,
`qq` varchar(20) DEFAULT NULL,
`phone` varchar(20) DEFAULT NULL,
`bir` date DEFAULT NULL,
`starts` varchar(20) DEFAULT NULL,
`attr` varchar(10) DEFAULT NULL,
`mark` varchar(600) DEFAULT NULL,
`clazzId` varchar(40) DEFAULT NULL,
`groupId` varchar(40) DEFAULT NULL,
`cityId` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_student
-- ----------------------------
BEGIN;
INSERT INTO `student` VALUES (11, 'yannan chen', 9, '344355', '01010533789', '2012-12-12', '射手座', '龙', '', '11', '5', '4');
COMMIT;
-- ----------------------------
-- Table structure for t_student_tag
-- ----------------------------
DROP TABLE IF EXISTS `student_tag`;
CREATE TABLE `student_tag` (
`sid` int(40) NOT NULL,
`tid` int(40) NOT NULL,
PRIMARY KEY (`sid`,`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_student_tag
-- ----------------------------
BEGIN;
INSERT INTO `student_tag` VALUES (11, 16);
INSERT INTO `student_tag` VALUES (11, 17);
INSERT INTO `student_tag` VALUES (11, 18);
COMMIT;
-- ----------------------------
-- Table structure for t_tag
-- ----------------------------
DROP TABLE IF EXISTS `tag`;
CREATE TABLE `tag` (
`id` int(40) NOT NULL AUTO_INCREMENT,
`name` varchar(40) DEFAULT NULL,
`type` varchar(8) DEFAULT NULL,
`createDate` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of t_tag
-- ----------------------------
BEGIN;
INSERT INTO `tag` VALUES (3, '帅哥', '学生', '2021-05-24');
INSERT INTO `tag` VALUES (4, '美女',