一、项目定位与学习价值
项目性质:SpringBoot单体架构外卖系统,教学重点是JavaWeb核心技术的综合运用(非分布式)。
适合人群:学完SSM但缺乏完整项目经验的开发者
收获预期:
- 打通前后端协作全流程
- 掌握企业级代码规范与调试技巧
- 理解业务设计与技术选型的权衡
二、技术栈全景(单体版)
✅ 核心框架:SpringBoot 2.x + Spring MVC + MyBatis Plus
✅ 安全认证:JWT + Spring Security (权限控制)
✅ 缓存工具:Redis 5.x (基础缓存)
✅ 数据库:MySQL 8.0 (单库单表)
✅ 辅助工具:Swagger2、Lombok、Hutool
✅ 前端技术:Vue.js + ElementUI(教学提供现成前端)
三、单体项目的核心技术点
1. 分层架构与工程规范
├─sky-common # 工具类/常量/异常处理
├─sky-pojo # 实体类/DTO/VO
├─sky-server # 业务逻辑层
└─sky-web # 控制层/静态资源
核心收获:
- Maven多模块拆分:理解模块化开发的必要性
- 统一响应体封装:Result<T> 规范接口返回格式
- 全局异常处理:@ControllerAdvice + 自定义业务异常
2. 权限控制实战(JWT + Spring Security)
避坑指南:
- Token过期时间设置(建议2小时)
- ThreadLocal内存泄漏问题(使用后remove)
- 接口权限注解:@PreAuthorize("hasAuthority('admin')")
3. 业务功能开发技巧
案例1:菜品管理
优化点:
- 启用/禁用状态使用枚举类
- 图片上传采用阿里云OSS(教学版可能用本地存储)
案例2:订单状态流转
关键点:
- 状态校验保证业务合法性
- 事务管理:@Transactional 确保扣减库存与更新订单的原子性
四、典型问题与解决方案
1. 前后端联调问题
场景:前端传参格式与后端接收不一致
排查步骤:
- 浏览器F12查看Network请求体
- Postman模拟请求
- 后端断点调试 + 打印完整SQL日志
2. 重复提交问题
方案:
- 前端:提交按钮防抖(300ms禁用)
- 后端:Redis setnx 实现简易幂等控制
五、项目局限性分析与改进建议
教学项目的不足:
- 数据库设计简单(无分库分表)
- 缓存使用较基础(未涉及穿透/雪崩方案)
- 订单超时未支付需手动取消(未集成定时任务)
自主优化方向:
- 增加Spring Task定时关单功能
- 使用Redisson实现分布式锁(为后续分布式铺垫)
- 接入ELK日志分析系统
六、学习收获总结
- 工程化思维:学会用Maven管理依赖、Git管理代码版本
- 调试能力提升:掌握IDEA Debug技巧、SQL性能分析
- 业务抽象能力:从“增删改查”到复杂状态流转的设计
七、给初学者的建议
- 不要忽视“简单”代码:理解每行xml配置的作用比盲目追求新技术更重要
- 多写注释:复杂业务方法务必添加注释,一个月后自己还能看懂
- 主动延伸学习:比如尝试将本地文件存储改为OSS云存储
项目源码:[黑马官方Git仓库地址]
推荐扩展:
- 如何从单体迁移到微服务?
- 如何用Jenkins部署SpringBoot项目?
写在最后:
单体项目是通往架构师的必经之路,把基础打牢才能在分布式时代走得更稳。建议完成本项目后,尝试用DDD思想重构代码,或加入消息队列解耦业务,这才是真正的进阶之道!