Ocean Platform 是一个面向在线学习课堂场景的 Spring Boot 后端项目,集成了用户登录认证、课程管理、抢课处理、文件上传、课堂实时通信等常见教学平台核心能力
本项目围绕“在线课堂”业务展开,提供了从用户登录、课程创建、课程查询,到学生抢课、文件上传、课堂消息广播的一整套后端基础能力。
项目不仅包含常规的 RESTful API,还结合了 Redis、RabbitMQ、MinIO 和 WebSocket,覆盖了真实业务系统中常见的缓存、消息队列、对象存储和实时通信等技术点。
- Java 17
- Spring Boot 3.3
- MyBatis-Plus
- MySQL 8
- Redis 7
- RabbitMQ 3
- MinIO
- WebSocket
- JWT
- Docker Compose
- 用户登录与当前用户信息查询
- 教师端课程创建与编辑
- 课程列表与课程详情查询
- 学生抢课与异步处理结果查询
- 基于 MinIO 的文件上传
- 基于 WebSocket 的课堂实时消息通信
- 基于 RabbitMQ 的异步消息处理与广播
src/main/java/com/studyclassroom
├─ common # 通用返回体、上下文、异常处理、拦截器、工具类
├─ config # JWT、MinIO、RabbitMQ、WebMvc、WebSocket 配置
└─ module
├─ user # 用户登录与用户信息
├─ course # 课程管理与查询
├─ file # 文件上传
├─ selection # 抢课与结果查询
├─ mq # 抢课异步消息生产与消费
└─ classroom # 课堂 WebSocket 实时通信
项目通过 Docker Compose 启动 MySQL、Redis、RabbitMQ 和 MinIO。
docker compose up -d默认服务端口如下:
- MySQL:
127.0.0.1:3307 - Redis:
127.0.0.1:6379 - RabbitMQ:
127.0.0.1:5672 - RabbitMQ 管理后台:
http://127.0.0.1:15672 - MinIO API:
http://127.0.0.1:9000 - MinIO 控制台:
http://127.0.0.1:9001
mvn spring-boot:run或者先打包再运行:
mvn clean package
java -jar target/study-classroom-0.0.1-SNAPSHOT.jar项目默认启动地址:
http://127.0.0.1:8080
项目示例配置文件位于 src/main/resources/application.yml。
默认配置包括:
- MySQL 数据库名:
study_classroom - MySQL 用户名:
root - MySQL 密码:
root1234 - RabbitMQ 用户名:
study - RabbitMQ 密码:
study1234 - MinIO Access Key:
minioadmin - MinIO Secret Key:
minioadmin - 服务端口:
8080
如果用于生产环境,请务必修改默认账号、密码和 JWT 密钥。
POST /api/user/login:用户登录GET /api/user/me:获取当前登录用户信息
POST /api/teacher/course:创建课程PUT /api/teacher/course/{courseId}:编辑课程GET /api/course/list:查询课程列表GET /api/course/{courseId}:查询课程详情
POST /api/course/{courseId}/select:提交抢课请求GET /api/course/select/result?requestId=xxx:查询抢课处理结果
POST /api/file/upload:上传文件
GET /ws/classroom/{courseId}:连接课堂 WebSocket 通道
WebSocket 连接会在握手阶段解析登录信息,用于识别当前课堂用户身份。
用户通过登录接口获取 JWT,后续请求通过拦截器解析登录态,并将当前用户信息写入上下文,供业务模块使用。
教师可以创建和编辑课程,学生端可以查看课程列表与课程详情。
学生发起抢课请求后,系统会先提交请求,再通过 RabbitMQ 异步消费处理选课逻辑,避免高并发下直接同步落库带来的压力。
系统支持:
- requestId 幂等控制
- 重复抢课判断
- 库存扣减
- 选课结果轮询查询
上传文件后,系统会将文件保存到 MinIO,并返回对应的文件访问地址和元数据。
课堂消息通过 WebSocket 接入,后端将消息投递到 RabbitMQ 广播链路,再分发给当前课程下的在线会话,实现课堂实时消息同步。