一句话定位:国内 Java 圈最有名的「电商实战教学项目」——Spring Boot 多模块单体 + Vue 3 后台 + uni-app 前台,功能完整、文档极全,但它首先是用来学架构的,不是拿来直接开店的。
| 项 | 值 |
|---|---|
| 仓库地址 | https://gitee.com/macrozheng/mall (GitHub:github.com/macrozheng/mall) |
| 官方站点 | https://www.macrozheng.com (mall 学习教程) |
| 开源协议 | Apache-2.0,Copyright 2018-2026 macrozheng |
| 技术栈 | Java 17 / Spring Boot 3.5.14 / Spring Security / MyBatis / MySQL / Redis / MongoDB / RabbitMQ / Elasticsearch |
| 当前版本 | 无版本号发布,pom 为 1.0-SNAPSHOT,按分支跟踪 |
| 社区热度 | Gitee 27,271 Star / 5,241 Fork / 1,322 Watch(接口实测 2026-10-25);官方口径称 GitHub 60K+ |
| 维护团队 | macrozheng(个人项目,单人维护) |
| 仓库活跃度 | 创建于 2019-02-16,最近推送 2026-09-15,未关闭 Issue 15 个 |
| 文档日期 | 2026-10-25 |
1. 项目是什么
mall 是一套功能完整的电商系统参考实现,包含后台管理(mall-admin)、前台商城(mall-portal)、商品搜索(mall-search)三个可独立启动的服务,配 Vue 3 后台前端与 uni-app 移动端,用 Docker 容器化部署。
它和一般「开源商城」最大的区别在于定位:它的第一属性是教学项目。作者围绕它写了整套学习教程(架构篇 / 业务篇 / 部署篇 / 扩展篇)和 115 期视频课程,代码组织的首要目标是「让人看得懂、能照着搭」,而不是「让商家直接开张」。
它解决的核心问题:
- 缺少一个能完整学习的电商范例 —— 商品/SKU、购物车优惠计算、确认单、订单状态机、权限 RBAC、ES 搜索、延迟消息关单,这些在企业里看不到全貌的东西它都摆出来了。
- 不知道主流 Java 技术栈怎么串起来 —— Redis、MongoDB、RabbitMQ、Elasticsearch、MinIO、ELK、Jenkins 一次性整合在一套业务里,不是孤立的 Hello World。
- 毕设与面试需要一个「完整项目经验」 —— 文档全、能跑通、讲得清设计思路,这一档几乎没有更强替代品。
不适用的场景:它没有内置支付(支付宝对接只在「扩展篇」教程里讲实现思路);没有多商户、分销、拼团、风控、对账;不做秒杀级高并发压测;没有生产级监控告警与安全审计。直接拿它当生产电商系统用,是选型误判。
2. 核心特性
| 特性 | 说明 | 对使用者的价值 |
|---|---|---|
| 三服务拆分 | admin / portal / search 独立启动,共用 common、mbg、security 模块 | 可按需启动,学架构时边界清晰 |
| Elasticsearch 商品搜索 | 关键词 + 品牌 + 分类多维度组合筛选、聚合 | 电商搜索的标准实现范例 |
| 购物车与优惠计算 | 优惠以商品为单位计算(非 SKU),确认单才体现优惠金额 | 这是最容易设计错的环节,代码有注释说明取舍 |
| RabbitMQ 延迟消息 | 订单超时自动取消 | 延迟队列的典型业务落地 |
| MongoDB 文档存储 | 商品详情等非结构化内容 | 关系库 + 文档库混合建模示例 |
| 多对象存储 | 阿里云 OSS + MinIO 双支持,可切换 | 换云厂商不改业务代码 |
| ELK 日志方案 | Logstash 收集 + Kibana 可视化 | 生产日志链路的完整演示 |
| Docker / Jenkins 部署 | fabric8 插件打镜像、Docker Compose、Jenkins 自动化 | 从开发到部署的全链路可复现 |
| 教程体系 | 免费网页教程 + 115 期视频课程(约 40 小时) | 学习成本被压到极低,这是它真正的护城河 |
3. 技术架构
整体结构:多模块单体(modular monolith),不是微服务。四个可启动的 Spring Boot 应用 —— mall-admin(后台接口)、mall-portal(前台接口)、mall-search(搜索服务)、mall-demo(框架搭建期的测试代码,可忽略)。业务层各自独立,底层共用 mall-common、mall-mbg、mall-security。
技术选型(版本取自仓库根 pom.xml,master 分支实测):
| 层 | 技术 | 版本 | 备注 |
|---|---|---|---|
| 运行时 | Java | 17 | master 分支要求 |
| 框架 | Spring Boot | 3.5.14 | starter-parent 版本 |
| 安全 | Spring Security + JWT | 随 Boot | 认证授权 + 动态权限 |
| 持久 | MyBatis + PageHelper | 3.5.19 / 6.1.1 | starter 3.0.4 |
| 代码生成 | MyBatis Generator | 1.4.2 | 生成 mall-mbg 下的实体与 Mapper |
| 文档 | SpringDoc OpenAPI | 2.8.17 | 已从 Swagger-UI 换到 springdoc |
| 连接池 | Druid | 1.2.24 | boot-3-starter |
| 工具 | Hutool | 5.8.40 | all 包 |
| 数据库 | MySQL Connector/J | 9.3.0 | 环境说明写 MySQL 5.7 |
| 缓存 | Redis | 7.0(环境) | 会话、缓存、防重复提交 |
| 文档库 | MongoDB | 5.0(环境) | 商品详情 |
| 消息 | RabbitMQ | 3.10.5(环境) | 延迟消息关单 |
| 搜索 | Elasticsearch | 7.17.3(环境) | plus Logstash / Kibana 同版本 |
| 存储 | 阿里云 OSS / MinIO | 3.18.5 / 8.6.0 | 双实现 |
| 支付 | alipay-sdk | 4.40.630.ALL | 仅扩展篇教程使用 |
| 容器 | fabric8 docker-maven-plugin | 0.45.1 | 基础镜像 openjdk:17 |
关键取舍:选择「多模块单体 + 中间件全家桶」而非微服务,是为了让一个学习者在一台机器上跑通全链路;代价是环境依赖极重(六个中间件起步)。mall-security 独立成模块、mall-mbg 用代码生成器产出、mall-demo 保留在仓库里,都是教学优先的痕迹 —— 这不是缺点,但你得知道自己在用什么。
4. 目录结构
mall
├── mall-common 工具类与通用代码(返回体、异常、Redis 配置等)
├── mall-mbg MyBatis Generator 生成的数据库操作代码(实体 + Mapper)
├── mall-security Spring Security + JWT 封装,供 admin / portal 复用
├── mall-admin 后台管理系统接口(商品、订单、营销、权限、内容、报表)
├── mall-search 基于 Elasticsearch 的商品搜索服务
├── mall-portal 前台商城系统接口(门户、购物车、下单、会员中心)
├── mall-demo 框架搭建期的测试与示例代码
├── document 架构图、功能结构图、SQL 等文档资源
└── pom.xml Spring Boot 3.5.14 parent,全模块依赖管理| 目录 / 文件 | 备注 |
|---|---|
document/ | 内含数据库脚本与各类功能结构图(商品/订单/促销/内容/用户/前台) |
mall-mbg | 不要手改,由 MyBatis Generator 重新生成会覆盖 |
mall-demo | 学习时可参考写法,生产部署无需启动 |
| 前端仓库 | mall-admin-web(Vue 3 + Element Plus)、mall-app-web(uni-app),独立仓库不在本仓库内 |
5. 快速上手
环境硬门槛(官方给出的版本组合,照抄最省事):
| 组件 | 版本 | 备注 |
|---|---|---|
| JDK | 17 | master 分支;老分支 dev-v2 是 JDK 8 |
| MySQL | 5.7 | 装 8.x 也能跑,注意时区与字符集 |
| Redis | 7.0 | 必需 |
| MongoDB | 5.0 | 前台商城与商品详情需要 |
| RabbitMQ | 3.10.5 | 延迟消息关单需要 |
| Nginx | 1.22 | 前端静态资源与反向代理 |
| Elasticsearch | 7.17.3 | 搜索服务必需 |
| Logstash / Kibana | 7.17.3 | ELK 日志,可选 |
重要提示:只启动 mall-admin 的话,只需 MySQL + Redis。学习和二次开发从这一步切入,别一上来就装六个中间件。方式 A:本地开发运行
# 1. 克隆(后端)
git clone https://gitee.com/macrozheng/mall.git
# 2. 导入 IDEA,等 Maven 依赖下载完成
# 3. 建库并导入 document 目录下的 SQL 脚本
# 4. 改各模块 application.yml:数据库、Redis、MongoDB、RabbitMQ、ES 连接信息
# 5. 按需启动
# mall-admin → 后台管理接口
# mall-portal → 前台商城接口
# mall-search → 商品搜索(需先启动 ES)
# 6. 克隆并部署前端
git clone https://gitee.com/macrozheng/mall-admin-web.git
# 安装依赖、改接口地址、npm run dev方式 B:Docker 部署
# 中间件按文档逐个起,或用 Docker Compose 一次性拉起
# 后端镜像构建走 pom 里的 fabric8 docker-maven-plugin
# 注意:需先修改 pom.xml 中的 docker.host(默认是作者内网地址,见第 11 节)
mvn clean package -DskipTests
# 前端构建产物交给 Nginx 托管启动失败高频原因:Redis 没起(登录直接失败);ES 版本与代码里的客户端不匹配(7.17.x 才对应当前代码);MongoDB 未启动导致前台商品详情 500;docker.host 未改导致镜像构建连不上 Docker;JDK 用了 8 跑 master 分支(编译直接报错)。
6. 功能模块清单
| 端 | 模块 | 主要能力 | 备注 |
|---|---|---|---|
| 后台 | 商品管理 | 商品列表、添加(信息/促销/属性/关联四步)、分类、类型、品牌、SKU 库存 | 核心模块,SKU 建模是重点 |
| 后台 | 订单管理 | 订单列表、订单设置、退货申请处理、退货原因设置 | 含订单状态流转 |
| 后台 | 营销管理 | 秒杀活动、优惠券(全场/分类/商品券)、品牌推荐、新品推荐、人气推荐、专题推荐、广告列表 | 营销配置项齐全 |
| 后台 | 权限管理 | 用户、角色、菜单、资源,RBAC 模型 + 动态权限 | Spring Security + JWT |
| 后台 | 内容管理 | 专题、广告位等运营内容 | 内容侧偏轻 |
| 后台 | 会员管理 | 会员列表与等级 | 标签、积分在业务篇讲 |
| 后台 | 统计报表 | 今日订单/销售额、待处理事务、商品与用户概览、订单统计 | 图表用 v-charts |
| 后台 | 财务管理 | 财务相关列表 | 轻量,非完整对账体系 |
| 后台 | 设置 | 系统基础配置 | — |
| 前台 | 首页门户 | 轮播、推荐、分类入口 | uni-app 实现 |
| 前台 | 商品搜索 | ES 关键词 + 品牌 + 分类筛选排序 | 独立 mall-search 服务 |
| 前台 | 购物车 | 加购、改量、勾选、优惠计算 | 优惠在确认单体现 |
| 前台 | 订单流程 | 确认单、下单、支付回调、取消 | 支付需自行对接 |
| 前台 | 会员中心 | 登录注册、地址、订单、收藏 | — |
| 前台 | 客户服务 / 帮助中心 | 静态与工单式页面 | 内容型 |
7. 版本与授权
版本跟踪方式:项目不发布 Release 版本号,靠分支区分。
| 分支 | 技术栈 | 适用人群 | 备注 |
|---|---|---|---|
master | Spring Boot 3.5.14 + JDK 17 | 新项目、新学习者 | 当前默认分支,pom 实测 |
dev-v2 | Spring Boot 2.7 + JDK 8 | 老环境、公司还在 JDK 8 的 | 按 Gitee README 口径 |
mall-swarm | Spring Cloud Alibaba + Spring Boot 3.5 + Sa-Token + K8s | 想学微服务的 | 独立仓库,非本仓库分支 |
协议要点
- Apache-2.0:可商用、可闭源分发、可改可卖,只需保留版权与许可声明。
- 没有商业版、没有授权费、没有功能阉割。它的全部源码就是全部能力,这点在国内同类项目里相当少见。
- 无「禁止商用」条款、无「必须保留 Logo」要求、无二次授权限制。
8. 商业模式说明
这是本篇最值得说清的一节:mall 是「知识型开源」的典型样本 —— 代码全免费,收费的是「怎么学」。
| 收入层 | 产品 | 怎么赚钱 | 定位 |
|---|---|---|---|
| ① 免费开源 | mall、mall-swarm、mall-admin-web、mall-app-web、mall-tiny、mall-learning、springcloud-learning | 不收一分钱,Apache-2.0 全开放 | 流量入口与个人品牌 |
| ② 免费内容 | 官网《mall 学习教程》:架构篇 / 业务篇 / 部署篇 / 扩展篇,全部网页可读 | 免费,靠 SEO 与口碑获客 | 转化漏斗的中间层 |
| ③ 付费课程 | 《mall 视频教程》115 期、约 40 小时,在知识星球内提供(部分集数 B 站可试看);另有 cloud.macrozheng.com 的 mall-swarm 微服务教程 | 知识星球付费会员 | 主要变现方式 |
| ④ 私域运营 | 公众号「macrozheng」+ 微信群 | 流量沉淀、课程复购、广告 | 长期资产 |
| ⑤ 技术影响力 | 27K Gitee Star、60K+ GitHub 口径 | 带来出书、演讲、内推、咨询机会 | 隐性收益 |
几个要点
- 不做 SaaS、不卖源码、不接定制。对比 MCMS(公司卖四档授权)和微同商城(卖商业版源码),mall 走的是完全第三条路:用免费代码换影响力,用影响力卖课程。
- 这套模式成立的前提是「项目本身足够好、足够完整、足够有学习价值」—— 代码质量就是产品力,一旦变成「能用就行」,课程就没人买。这解释了为什么它的文档和注释质量在同类项目里明显高一档。
- 对使用者意味着什么:代码零成本,时间成本自负。你不需要为授权付钱,但如果想省掉「自己啃代码」的时间,付费课程就是那个商品。反过来说,只看网页教程 + 读代码,也完全够把项目跑通并二次开发 —— 没有功能锁。
- 单人维护是这套模式的必然结果,也是它最大的结构风险(见第 11 节)。
9. 生态与周边
| 类型 | 名称 / 地址 | 说明 |
|---|---|---|
| 后端主项目 | gitee.com/macrozheng/mall | 本仓库,多模块单体 |
| 微服务版 | gitee.com/macrozheng/mall-swarm | Spring Cloud Alibaba 版,约 13.2K Star |
| 后台前端 | gitee.com/macrozheng/mall-admin-web | Vue 3 + Element Plus |
| 移动端前台 | gitee.com/macrozheng/mall-app-web | uni-app,一套代码多端 |
| 精简脚手架 | gitee.com/macrozheng/mall-tiny | Spring Boot + MyBatis-Plus,带完整权限,开箱即用 |
| 教程示例代码 | gitee.com/macrozheng/mall-learning | 教程配套源码 |
| Spring Cloud 教程 | gitee.com/macrozheng/springcloud-learning | 微服务组件学习项目 |
| 学习教程站 | www.macrozheng.com | 免费网页教程 + 课程入口 |
| 微服务教程站 | cloud.macrozheng.com | mall-swarm 专项教程 |
| 在线演示 | www.macrozheng.com/admin/index.html · /app/ | 后台与移动端(H5)演示 |
| 交流渠道 | 公众号「macrozheng」回复「加群」 | 微信群,非 Issues 为主 |
扩展方式三条路:① 在 mall-* 业务模块加 Service/Controller,按现有分层照写;② 用 MyBatis Generator 加表再生成 mall-mbg;③ 换前端(mall-admin-web 或 mall-app-web 整套替换),后端接口不用动。
10. 选型建议
强烈建议用
- Java 学习者与面试准备者 —— 想讲清「电商系统怎么设计」,这一套的教程密度几乎无对手。
- 毕设、课程设计 —— 模块全、文档全、演示站能看效果。
- 企业内部技术培训与脚手架参考 —— 拿来当规范样板,比自研一套教学材料便宜得多。
可以试试
- 企业内部系统或小电商 MVP:功能骨架够用,但支付、物流、对账、风控要自己补,别低估这部分工作量。
- 想学微服务的团队:直接上
mall-swarm,别在单体上硬改。
不建议用
- 直接当生产电商系统上线 —— 无支付、无风控、无多商户、无压测与监控体系,教学定位决定了它不做这些。
- 需要开箱即用商用商城的商家 —— 转微同商城商业版、CRMEB、likeshop 这类有商业支持的。
- 追求自动化测试与 CI 质量门禁的团队 —— 根 pom 全局
skipTests=true,项目基本没有自动化测试兜底。
同类对比
| 维度 | mall | mall-swarm | 微同商城 | newbee-mall |
|---|---|---|---|---|
| 定位 | 教学实战(单体) | 教学实战(微服务) | 可商用商城 | 轻量教学商城 |
| 后端 | Spring Boot 3.5 / JDK 17 | Spring Cloud Alibaba + Boot 3.5 | Spring Boot 3.2.5 / JDK 21 | Spring Boot |
| 前端 | Vue 3 后台 + uni-app 前台 | Vue 后台 | Vue 2 后台 + 小程序 | Vue 后台 |
| 中间件依赖 | 6 个以上 | 更多(注册/配置中心等) | MySQL + Redis 为主 | MySQL + Redis |
| 支付 | 无(教程讲思路) | 无 | 微信支付已接通 | 无 |
| 商用就绪度 | 低 | 低 | 中 | 低 |
| 社区规模 | 27.3K(Gitee) | 13.2K | 27.7K(Gitee) | 11.7K |
11. 风险与坑
定位层(最需要提前认清的一条)
- 它没有内置支付。README 承诺「完整订单流程」,但支付成功回调、渠道对接属于「扩展篇教程」内容,代码里没有可用的生产级支付实现。任何「拿它开店」的计划都必须先算这块成本。
- 没有多商户、分销、拼团、秒杀防超卖方案(营销模块只是配置层面)、没有对账与风控。教学项目不做这些是合理的,但选型时要清楚。
环境与工程层
- 中间件太多(MySQL / Redis / MongoDB / RabbitMQ / ES / ELK / MinIO),新手一上来全装容易卡死在环境上。先只跑
mall-admin+ MySQL + Redis。 - 根
pom.xml里docker.host写死为http://192.168.3.101:2375—— 这是作者本机地址。用 docker-maven-plugin 构建镜像前必须改成自己的 Docker 地址,否则连不上。顺带提醒:2375 端口明文无 TLS 暴露在大网上是高危配置,不要照抄到生产机。 - 根 pom 全局
skipTests=true,并且仓库几乎没有自动化测试。二次开发改动后没有回归网,只能靠手工验证。 mall-mbg是生成代码,手改会被下次生成覆盖,业务扩展要写在mall-*模块里。
版本与信息一致性层
- 分支说明三处口径不一致:Gitee README 说 master = Spring Boot 3.5 + JDK 17、dev-v2 = 2.7 + JDK 8;GitHub 镜像 README 仍写 master = 2.7 + JDK 8、dev-v3 = 3.2 + JDK 17。以仓库 pom.xml 为准(实测 3.5.14 / Java 17),GitHub 那份说明已滞后。
- README 技术选型表里前端写「Vue + Element」,但
mall-admin-web实际已是 Vue 3 + Element Plus。别按 README 的表去判断前端版本。 - 环境表写 MySQL 5.7,但驱动是
mysql-connector-j 9.3.0。装 MySQL 8.x 反而更匹配,5.7 属于历史遗留说明。 - 视频教程里的技术栈版本(如 Spring Boot 3.2.2、Druid 1.2.21)已经落后于当前 master,跟着视频搭环境会出现版本对不上的情况,以 pom 为准。
维护层
- 单人维护(bus factor = 1)。这不是团队项目,作者个人节奏直接决定项目生死;最近一次推送 2026-09-15,仍在维护但频率不算高。
- 无 CI、无自动化测试、无正式 Release 版本号,只有分支。生产使用要自己建质量体系。
生产落地 checklist
| 序号 | 检查项 | 备注 |
|---|---|---|
| 1 | 支付链路自建 | 微信/支付宝下单、回调、退款、对账全部要自己写,别指望仓库 |
| 2 | docker.host 已改 | 默认是作者内网 IP,不改无法构建镜像 |
| 3 | Docker 2375 不裸奔 | 生产必须加 TLS 或只走本地 socket,作者配置仅适合个人开发机 |
| 4 | 自动化测试补齐 | 根 pom skipTests=true,上线前必须自建回归用例 |
| 5 | 中间件高可用方案 | Redis 集群、ES 集群、RabbitMQ 镜像队列都要另行设计 |
| 6 | 监控与告警 | 项目只有 actuator 端点,需接 Prometheus 或云监控 |
| 7 | 静态资源与上传 | OSS 或 MinIO 二选一,且要配好跨域与防盗链 |
| 8 | 版本锁定 | 无 Release 号,需自己 tag 一个 commit 作为基线,避免跟随时被改动打断 |