学校管理系统 - 微服务模块化项目结构
项目概述
本项目是一个基于 Spring Boot 3.x 和 Spring Cloud 的微服务架构的学校管理系统。
模块说明
1. school-common(公共模块)
- 功能:提供公共依赖、工具类、配置、注解等
- 包结构 :
com.school.common.*- 通用组件com.school.common.annotation- 自定义注解com.school.common.aspect- AOP切面com.school.common.config- 配置类com.school.common.exception- 异常处理com.school.common.util- 工具类com.school.common.dto- 数据传输对象com.school.common.entity- 实体基类
2. school-auth(认证授权服务)
- 功能:登录、注册、JWT生成与验证、验证码
- 端口:8081
- 数据表 :
sys_user,sys_captcha,sys_login_log - API接口 :
POST /auth/login- 用户登录POST /auth/register- 用户注册GET /auth/captcha- 获取验证码POST /auth/logout- 用户登出POST /auth/refresh- 刷新Token
3. school-system(系统管理服务)
- 功能:用户管理、角色管理、权限管理、部门管理、菜单管理
- 端口:8082
- 数据表 :
sys_user,sys_role,sys_menu,sys_dept,sys_file - API接口 :
GET /sys/user/page- 分页查询用户POST /sys/user- 新增用户PUT /sys/user- 修改用户DELETE /sys/user/{id}- 删除用户GET /sys/role/list- 角色列表GET /sys/menu/tree- 菜单树
4. school-edu(教学管理服务)
- 功能:学生管理、教师管理、课程管理、班级管理、专业管理
- 端口:8083
- 数据表 :
edu_student,edu_teacher,edu_course,edu_class,edu_major,edu_college - API接口 :
GET /edu/student/page- 分页查询学生GET /edu/teacher/page- 分页查询教师GET /edu/course/list- 课程列表GET /edu/class/list- 班级列表
5. school-dorm(宿舍管理服务)
- 功能:宿舍楼管理、宿舍房间管理、床位管理
- 端口:8084
- 数据表 :
dormitory_building,dormitory_room,dormitory_bed - API接口 :
GET /dorm/building/page- 宿舍楼分页GET /dorm/room/page- 宿舍房间分页GET /dorm/bed/list- 床位列表
6. school-life(生活服务管理)
- 功能:食堂管理、餐卡管理、菜品管理、窗口管理
- 端口:8085
- 数据表 :
cafeteria,cafeteria_window,dish,meal_card - API接口 :
GET /life/cafeteria/page- 食堂分页GET /life/dish/list- 菜品列表GET /life/meal-card/{id}- 餐卡详情
7. school-api(API聚合服务)
- 功能:提供统一的API入口,聚合各服务接口
- 端口:8086
- 作用:减少前端跨域请求,提供统一的API规范
8. school-gateway(API网关服务)
- 功能:API网关、路由转发、鉴权、限流、熔断
- 端口:8080
- 作用 :
- 统一入口
- 路由转发到各个微服务
- Token验证
- 限流保护
- 负载均衡
技术栈
核心框架
- Spring Boot 3.5.9
- Spring Cloud 2023.0.3
- Spring Cloud Alibaba 2023.0.1.2
服务治理
- Nacos - 服务注册与发现、配置中心
- OpenFeign - 服务间调用
- Gateway - API网关
- Loadbalancer - 负载均衡
数据层
- MyBatis Plus 3.5.7
- MySQL 8.0
- Druid - 连接池
缓存
- Redis - 分布式缓存
安全认证
- Spring Security
- JWT (jjwt 0.12.5)
工具类
- Hutool 5.8.26
- Lombok 1.18.30
- Apache Commons
文档
- Knife4j 4.4.0
- Springdoc OpenAPI 2.5.0
服务端口分配
| 服务 | 端口 | 说明 |
|---|---|---|
| school-gateway | 8080 | API网关 |
| school-auth | 8081 | 认证授权 |
| school-system | 8082 | 系统管理 |
| school-edu | 8083 | 教学管理 |
| school-dorm | 8084 | 宿舍管理 |
| school-life | 8085 | 生活服务 |
| school-api | 8086 | API聚合 |
迁移步骤
第一阶段:创建模块结构(已完成)
- 创建父POM文件,定义依赖管理
- 创建各子模块的POM文件
- 定义模块间的依赖关系
第二阶段:代码迁移(待执行)
- 将
school-common的代码迁移到com.school.common包下 - 将认证相关代码迁移到
school-auth - 将系统管理相关代码迁移到
school-system - 将教学管理相关代码迁移到
school-edu - 将宿舍管理相关代码迁移到
school-dorm - 将生活服务相关代码迁移到
school-life - 在
school-api中创建Feign客户端接口 - 配置
school-gateway的路由规则
第三阶段:配置迁移(待执行)
- 配置各服务的
application.yml - 配置 Nacos 连接信息
- 配置数据库连接(分库或共享库)
- 配置 Redis 连接
- 配置 JWT 密钥
第四阶段:测试验证(待执行)
- 启动 Nacos 服务
- 启动 Redis 服务
- 启动各微服务
- 测试服务注册
- 测试服务间调用
- 测试网关路由
数据库设计
方案一:共享数据库(简化版)
所有微服务共享同一个数据库 school_management
方案二:分库分表(推荐)
每个微服务独立的数据库:
school_auth- 认证服务库school_system- 系统管理库school_edu- 教学管理库school_dorm- 宿舍管理库school_life- 生活服务库
调用关系
前端请求 -> Gateway -> [鉴权] -> 微服务
|
v
Nacos
|
+-------------+-------------+
| | |
school-auth school-system school-edu
| | |
| school-dorm school-life
开发规范
包命名规范
- 公共模块:
com.school.common.* - 认证服务:
com.school.auth.* - 系统服务:
com.school.system.* - 教学服务:
com.school.edu.* - 宿舍服务:
com.school.dorm.* - 生活服务:
com.school.life.* - API服务:
com.school.api.* - 网关服务:
com.school.gateway.*
API接口规范
- RESTful风格
- 统一返回格式:
Result<T> - 分页返回格式:
PageResult<T> - 统一异常处理
配置管理
- 公共配置:
application.yml - 环境配置:
application-dev.yml,application-prod.yml - Nacos配置中心:动态配置
启动顺序
- 启动 Nacos Server
- 启动 Redis
- 启动 MySQL
- 启动 school-gateway
- 启动 school-auth
- 启动其他业务服务(school-system, school-edu, school-dorm, school-life)
- 启动 school-api(可选)
部署架构
┌─────────────┐
│ Nginx │
└──────┬──────┘
│
┌──────▼───────────────────────┐
│ school-gateway (8080) │
│ - 路由转发 │
│ - 鉴权 │
│ - 限流 │
└───┬────────┬────────┬────────┘
│ │ │
┌───▼────┐ ┌─▼────┐ ┌─▼────┐
│ auth │ │system│ │ edu │
└────────┘ └──────┘ └──────┘
│ │ │
┌───▼─────────▼────────▼──────┐
│ Nacos (8848) │
│ - 服务注册 │
│ - 配置中心 │
└────────────────────────────┘
│
┌───▼─────────┐
│ Redis │
└─────────────┘
待办事项
- 创建各模块的目录结构
- 迁移公共模块代码
- 迁移认证服务代码
- 迁移系统管理服务代码
- 迁移教学管理服务代码
- 迁移宿舍管理服务代码
- 迁移生活服务服务代码
- 创建 Feign 客户端接口
- 配置 Gateway 路由规则
- 编写各服务配置文件
- 数据库分库设计
- 编写单元测试
- 编写集成测试