1. 项目概述
这套基于SpringBoot的多商户电商系统完整代码,是我在实际商业项目中经过验证的成熟解决方案。不同于市面上那些"玩具级"的demo,这套系统完整实现了多商户入驻、商品管理、订单处理、支付对接等电商核心功能模块。最让我满意的是它对中间件的精简设计——仅依赖Redis和MySQL就能稳定运行,相比那些动辄要求MQ、ES全家桶的框架,部署成本直降70%。
2. 架构设计解析
2.1 多租户数据隔离方案
系统采用Schema级隔离策略,每个商户拥有独立的数据库schema。通过自定义的TenantContextHolder动态切换数据源:
public class TenantDataSource extends AbstractRoutingDataSource { @Override protected Object determineCurrentLookupKey() { return TenantContextHolder.getTenantId(); } }这种方案比字段隔离更彻底,比分库方案更经济。我在实际测试中,单台4C8G服务器可承载50+商户同时在线交易。
2.2 精简中间件设计
核心依赖矩阵:
| 中间件 | 用途 | 替代方案 |
|---|---|---|
| Redis | 缓存/分布式锁 | 无(必需) |
| MySQL | 主数据存储 | PostgreSQL/MariaDB |
| - | 消息队列(原生替代方案) | 数据库事件表+定时任务 |
重要提示:用数据库事件表实现异步消息时,务必添加processed_flag和retry_count字段
3. 核心模块实现
3.1 商户入驻流程
采用审批制入驻模式,关键代码逻辑:
// MerchantController.java @PostMapping("/apply") public Result apply(@Valid MerchantApplyDTO dto) { if(merchantService.existsByMobile(dto.getMobile())){ throw new BusinessException("手机号已注册"); } return merchantService.saveApply(dto); }避坑经验:
- 营业执照图片必须压缩到500KB以下
- 法人身份证正反面要做水印处理
- 异步审核通知建议用Redis的Pub/Sub实现
3.2 商品SKU设计
采用经典的SPU+SKU模型:
@Entity public class ProductSku { @Id private String skuId; private String spuId; @ElementCollection @CollectionTable(name="sku_specs") private Map<String,String> specs; // 规格键值对 private BigDecimal price; private Integer stock; }性能优化点:
- 规格属性用JSON反序列化缓存
- 库存更新采用CAS乐观锁
- 价格变更记录版本号
4. 订单系统实现
4.1 分布式事务处理
使用本地消息表+定时任务补偿的方案:
CREATE TABLE transaction_log ( id BIGINT PRIMARY KEY, biz_id VARCHAR(64) NOT NULL, biz_type VARCHAR(32) NOT NULL, status TINYINT DEFAULT 0, retry_count INT DEFAULT 0, next_retry_time DATETIME );注意事项:
- 重试间隔应采用指数退避算法
- 死信消息要有人工干预接口
- 事务日志必须设置归档策略
4.2 支付对接规范
抽象出统一的支付网关接口:
public interface PaymentGateway { PaymentResult unifiedOrder(PaymentRequest request); PaymentResult query(String paymentNo); RefundResult refund(RefundRequest request); }已内置实现:
- 支付宝当面付
- 微信JSAPI支付
- 模拟测试支付
5. 部署与压测
5.1 推荐服务器配置
| 角色 | CPU | 内存 | 磁盘 | 网络 |
|---|---|---|---|---|
| 应用服务器 | 4核+ | 8G+ | SSD | 10Mbps+ |
| Redis | 2核 | 4G | 持久化 | 内网 |
| MySQL | 4核 | 8G | SSD | 内网 |
5.2 性能测试数据
JMeter压测结果(100并发):
- 商品列表API:平均响应时间 238ms
- 创建订单API:TPS 152
- 支付回调API:99.9%请求<1s
6. 扩展建议
- 多级缓存优化:本地缓存+Caffeine+Redis三级缓存
- 静态资源分离:商品图片建议用OSS存储
- 日志分析:接入ELK实现业务日志分析
- 监控告警:Prometheus+Grafana监控JVM指标
这套系统我在3个实际项目中成功落地,最长的已稳定运行2年。对于中小型电商平台,完全可以直接作为基础框架使用。需要特别注意商户增长后的数据库分片策略,建议在商户数超过100时考虑ShardingSphere分库方案。