1. 项目概述这个基于SpringBootVueMySQL的作业管理系统是我去年指导的一个本科毕业设计项目经过三个月的开发和优化最终形成了一套完整的解决方案。系统采用前后端分离架构后端使用SpringBoot框架提供RESTful API前端采用Vue.js构建用户界面数据库选用MySQL 8.0进行数据存储。提示这个架构选择特别适合在校学生作为毕业设计项目因为技术栈主流且文档丰富遇到问题容易找到解决方案。系统主要功能包括教师端作业发布、批改、成绩管理学生端作业提交、查看成绩管理员端用户管理、系统监控特色功能文件上传、在线预览、作业查重2. 技术选型与架构设计2.1 后端技术栈SpringBoot 2.7.x作为后端框架主要基于以下考虑自动配置简化了传统Spring项目的繁琐配置内嵌Tomcat服务器部署方便丰富的starter依赖整合MyBatis、Redis等组件非常便捷数据库访问层采用MyBatis-Plus 3.5.x相比原生MyBatis减少了约60%的样板代码内置分页插件简化了分页查询强大的条件构造器方便复杂查询// 典型Service层代码示例 Service public class AssignmentServiceImpl extends ServiceImplAssignmentMapper, Assignment implements AssignmentService { Override public PageAssignmentVO getAssignmentPage(PageParam param) { return baseMapper.selectPage(param.toPage(), new LambdaQueryWrapperAssignment() .eq(Assignment::getCourseId, param.getCourseId()) .orderByDesc(Assignment::getDeadline)); } }2.2 前端技术栈Vue 3.x Element Plus作为前端框架组合组合式API比Options API更灵活Vite构建工具显著提升开发体验Element Plus提供了丰富的UI组件前端工程采用典型模块划分src/ ├── api/ # 接口定义 ├── assets/ # 静态资源 ├── components/ # 公共组件 ├── router/ # 路由配置 ├── stores/ # Pinia状态管理 ├── utils/ # 工具函数 └── views/ # 页面组件2.3 数据库设计MySQL 8.0数据库设计了12张核心表主要表关系如下表名主要字段说明userid, username, password, role用户基础表studentid, user_id, class_id学生扩展信息teacherid, user_id, title教师扩展信息courseid, name, credit课程信息assignmentid, course_id, title, content, deadline作业发布submissionid, assignment_id, student_id, file_url, submit_time作业提交注意密码字段使用BCrypt加密存储切勿明文保存用户密码3. 核心功能实现3.1 作业发布与提交教师发布作业时系统支持富文本编辑和文件上传。使用WangEditor作为富文本编辑器文件上传采用分片上传方案PostMapping(/upload) public RString upload(RequestParam(file) MultipartFile file) { // 1. 校验文件类型和大小 // 2. 生成唯一文件名UUID 时间戳 // 3. 分片上传到OSS/MinIO // 4. 返回文件访问URL }学生提交作业时系统会自动记录提交时间并与截止时间比对超时提交会标记为迟交状态。3.2 作业查重功能实现基于SimHash算法的简易查重系统对作业文本进行分词处理使用HanLP计算SimHash指纹比对已有作业的指纹库返回相似度报告public class PlagiarismChecker { public static double checkSimilarity(String text1, String text2) { // 1. 预处理文本去停用词、标点 // 2. 提取关键词 // 3. 计算SimHash // 4. 计算汉明距离 // 5. 转换为相似度百分比 } }3.3 成绩统计分析使用ECharts实现可视化统计班级成绩分布直方图课程成绩趋势折线图学生个人成绩雷达图前端通过WebSocket实时接收成绩更新通知保持数据同步。4. 系统部署方案4.1 开发环境配置JDK 17 IntelliJ IDEANode.js 16.x VSCodeMySQL 8.0 Redis 6.x推荐使用Docker容器化依赖服务# 启动开发环境依赖 docker-compose -f dev-env.yml up -d4.2 生产环境部署采用Nginx Docker组合部署方案前端构建静态文件部署到Nginx后端打包为JAR运行在Docker容器MySQL配置主从复制Redis作为缓存和会话存储Nginx关键配置server { listen 80; server_name your.domain.com; location / { root /var/www/html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://backend:8080; proxy_set_header Host $host; } }5. 项目优化与扩展5.1 性能优化实践接口响应优化启用SpringBoot Actuator监控添加Redis缓存热点数据使用Cacheable注解缓存查询结果前端性能优化路由懒加载组件按需引入开启Gzip压缩5.2 常见问题排查跨域问题确保后端添加CrossOrigin注解检查Nginx代理配置验证前端axios baseURL设置文件上传失败检查SpringBoot multipart配置确认存储目录权限查看Nginx client_max_body_sizeMySQL连接超时调整连接池参数检查服务器防火墙设置验证数据库用户权限5.3 扩展方向建议增加移动端支持Uniapp或React Native集成钉钉/微信消息通知添加自动化测试JUnit Jest实现CI/CD流水线Jenkins或GitHub Actions这个项目在实现过程中最大的收获是理解了前后端分离架构的实际应用场景。特别是在处理文件上传和WebSocket实时通知时遇到了不少挑战但最终通过查阅文档和社区讨论都得到了解决。建议后来者在开发类似系统时先从简单的CRUD功能入手逐步添加复杂功能这样更容易把控项目进度。