1206 字
6 分钟
苍穹外卖技术栈回顾

苍穹外卖项目技术栈解析#

本文档将深入分析“苍穹外卖”项目的代码实现,全面且清晰地介绍其所使用的各项技术及其在项目中的具体应用。

1. 项目结构#

项目采用标准的多模块Maven结构,职责清晰:

  • sky-pojo: 定义数据实体(Entity)、数据传输对象(DTO)和视图对象(VO),是项目的数据模型层。
  • sky-common: 存放通用工具类、常量、自定义异常、枚举等公共代码,供其他模块复用。
  • sky-server: 项目的核心业务模块,包含Controller、Service、Mapper等所有业务逻辑的实现。

2. 核心框架与Web配置#

  • Spring Boot: 作为项目的基础框架,整合了Spring MVC、依赖注入等核心功能,并通过内嵌的Tomcat服务器,使得项目可以打包成可执行的JAR文件独立运行。

  • Web配置 (WebMvcConfiguration):

    • 拦截器: 配置了两个独立的JWT拦截器(JwtTokenAdminInterceptorJwtTokenUserInterceptor),分别对管理端 (/admin/**) 和用户端 (/user/**) 的API请求进行身份认证,实现了清晰的权限控制。
    • JSON序列化: 扩展了Spring MVC的消息转换器,使用自定义的JacksonObjectMapper来统一处理日期时间格式,确保了前后端数据交互时格式的准确性。
    • API文档: 通过集成Knife4j,并分别为管理端和用户端配置了独立的文档分组,生成了结构清晰、便于查阅和测试的RESTful API文档。

3. 数据存储与访问#

  • MySQL: 作为主数据库,存储所有业务数据。

  • MyBatis: 持久层框架,通过XML文件管理SQL语句,将SQL与Java代码解耦,并允许开发者进行精细的SQL优化。

  • Druid: 高性能数据库连接池,提供连接管理和监控功能,保障数据库访问的稳定高效。

  • Redis:

    • 作用: 作为缓存中间件,主要用于缓存用户端频繁访问的数据,如套餐、菜品分类等。
    • 实现: 在RedisConfiguration中配置了RedisTemplate,并自定义了序列化方式,确保Key的可读性。在业务代码中,采用“先查缓存,缓存未命中则查数据库,再将结果写入缓存”的经典缓存策略,有效降低了数据库压力。
  • PageHelper: MyBatis分页插件,通过简单的配置和调用,无侵入地实现了后台管理系统的分页查询功能。

4. 业务功能的亮点实现#

  • 公共字段自动填充 (AOP):

    • 技术: Spring AOP + 自定义注解。
    • 实现: 定义了@AutoFill注解和autoFillAspect切面。在Mapper层的insert或update方法上使用@AutoFill注解后,切面会在方法执行前,通过反射自动为实体对象填充createTimecreateUserupdateTimeupdateUser等公共字段。这极大地简化了代码,避免了在每个业务方法中编写重复的赋值逻辑。
  • 用户认证 (JWT):

    • 技术: JSON Web Token。
    • 实现: 用户登录成功后,服务器使用jjwt库生成一个包含用户ID的Token。客户端在后续请求的请求头中携带此Token。服务器端的JWT拦截器会捕获请求,验证Token的合法性,并将解析出的用户ID存入基于ThreadLocal实现的BaseContext中,供当前线程的后续业务逻辑使用。
  • 实时消息推送 (WebSocket):

    • 技术: javax.websocket API。
    • 实现: 创建了一个WebSocketServer服务端点,通过一个静态Map管理所有客户端连接。当业务系统(如订单服务)需要推送消息时(例如“用户已催单”),会调用WebSocketServer的群发方法,将消息实时推送给所有在线的管理端客户端,实现了高效的实时提醒功能。
  • 定时任务处理:

    • 技术: Spring Task。
    • 实现: 在Ordertask类中使用@Scheduled注解定义了定时任务,例如“每小时检查并自动取消超时的未支付订单”。Spring Task会按照注解中定义的cron表达式,周期性地执行这些任务。

5. 第三方服务集成#

  • 阿里云OSS: 用于存储图片等静态文件。代码中封装了AliOssUtil工具类,简化了文件的上传操作。
  • 微信支付: 集成了微信支付的API,实现了用户在线下单支付的功能。
  • Apache POI: 用于后台报表导出功能,将运营数据生成为Excel文件供下载。

总结#

“苍穹外卖”项目是一个典型的、技术栈成熟的Java后端应用。它不仅综合运用了Spring Boot生态中的各项主流技术,还在具体业务场景中通过AOP、JWT、WebSocket等技术给出了优雅且高效的解决方案,是学习和实践Java Web开发的优秀案例。

苍穹外卖技术栈回顾
https://mizuki.mysqil.com/posts/sky-take-out/
作者
Daoge
发布于
2025-09-29
许可协议
CC BY-NC-SA 4.0
封面
示例歌曲
示例艺术家
封面
示例歌曲
示例艺术家
0:00 / 0:00