苍穹外卖(知识图谱+简要总结)
系统采用分层架构设计,核心框架层使用SpringBoot+MyBatis+PageHelper实现基础功能;数据层采用MySQL读写分离、Redis多场景应用及阿里云OSS存储;业务支撑层集成SpringTask定时任务和WebSocket实时通信;安全认证基于JWT实现。前端采用Vue3+ElementPlus管理端和微信小程序。系统通过Nginx反向代理和Docker容器化部署,实现了订单创建
·
📊 一、技术栈全景图(分层架构)

🔧 二、关键技术组件详解
1. 核心框架层
- Spring Boot 3.1.2
简化依赖管理与自动配置,通过@SpringBootApplication整合Tomcat容器。 - MyBatis 动态SQL
解决多条件查询拼接问题,支持XML与注解双模式:
<select id="searchDishes" resultType="DishVO">
SELECT d.*, c.name AS categoryName
FROM dish d LEFT JOIN category c ON d.category_id = c.id
<where>
<if test="name != null">AND d.name LIKE CONCAT('%', #{name}, '%')</if>
<if test="categoryId != null">AND d.category_id = #{categoryId}</if>
</where>
</select>
- PageHelper 分页插件
简化分页逻辑,避免手动计算LIMIT偏移量。
2. 数据层
- MySQL 读写分离
主库处理写操作(订单创建),从库处理读操作(菜品查询)。 - Redis 多场景应用
-
- 缓存热点菜品数据(
@Cacheable注解) - 分布式锁防重复提交(
SETNX命令) - 存储营业状态(启用/停业)。
- 缓存热点菜品数据(
- 阿里云OSS
替代本地存储,解决图片访问路径管理与CDN加速问题。
3. 业务支撑层
- Spring Task 定时任务
每5分钟扫描超时订单并自动取消:
@Scheduled(cron = "0 */5 * * * ?")
public void cancelUnpaidOrders() {
orderService.cancelExpiredOrders();
}
- WebSocket 实时通信
管理端接收新订单语音播报,用户端跟踪骑手位置。
4. 安全与通信
- JWT 无状态认证
Token中嵌入用户ID与角色,配合ThreadLocal实现线程级数据隔离。 - HttpClient 第三方集成
调用微信支付预下单接口、高德地图路径规划API。
5. 前端技术
- 管理端
Vue 3 + Element Plus 构建,采用模块化开发(components/、utils/目录)。 - 微信小程序
基于MINA框架,集成微信支付与LBS定位。
6. 运维部署
- Nginx 反向代理
配置静态资源缓存(JS/CSS)与API请求转发。 - Docker 容器化
封装应用与环境依赖,保证开发-测试-生产环境一致性。
⚙️ 三、典型业务场景实现
1. 订单创建流程
sequenceDiagram
用户->>小程序: 提交订单
小程序->>后端: 携带JWT发起请求
后端->>MySQL: 写入订单表(状态:待支付)
后端->>Redis: SETNX防重提交(Key:order_用户ID)
后端->>微信支付: HttpClient调用预支付接口
微信支付-->>后端: 返回支付二维码URL
后端-->>小程序: 返回支付链接
2. 全局异常处理
- 自定义业务异常类(如
DeletionNotAllowedException) @ControllerAdvice统一拦截异常,返回标准Result对象:
@ExceptionHandler(BusinessException.class)
public Result handleBizEx(BusinessException ex) {
return Result.error(ex.getMessage());
}
3. 公共字段自动填充
利用AOP+注解实现创建人/更新时间自动填充:
@AutoFill(OperationType.INSERT)
public void fillFields(BaseEntity entity) {
entity.setCreateTime(LocalDateTime.now());
entity.setCreateUser(CurrentUserUtil.getId());
}
🛡️ 四、技术选型优势与局限
|
维度 |
优势 |
局限性(教学版) |
|
开发效率 |
Spring Boot开箱即用 + Vue组件化开发 |
未引入代码生成器,基础CRUD需手动实现 |
|
性能 |
Redis缓存热点数据(QPS 5万+) + Nginx负载均衡 |
未优化缓存穿透/雪崩(如布隆过滤器) |
|
可维护性 |
Swagger接口文档 + 统一 响应格式 |
未集成ELK日志分析 |
|
扩展性 |
Docker容器化部署 |
未实现分库分表,MySQL单表数据量上限低 |
🔍 五、项目特色实践
- 分层解耦规范
严格划分四层:sky-common(工具类)、sky-pojo(实体/DTO)、sky-service(业务逻辑)、sky-web(Controller)。 - 防御式编程
-
- SQL注入防护:MyBatis参数绑定
#{param} - XSS攻击过滤:Jackson序列化转义HTML字符
- SQL注入防护:MyBatis参数绑定
- 事务一致性
关键操作(如下单扣库存)使用@Transactional保证原子性。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)