一、项目背景与架构设计
1.1 电商系统技术选型
在移动电商场景中,Spring Boot 3凭借其响应式编程支持、JDK 17+的现代特性以及模块化架构,成为后端开发的理想选择。结合微信小程序轻量级、易传播的特点,采用前后端分离架构:
- 后端架构:Spring Boot 3 + Spring Security OAuth2(认证授权) + Redis(缓存) + MySQL(主库) + MongoDB(商品详情)
- 前端架构:微信原生小程序框架 + WXML/WXSS + TypeScript
- 通信协议:RESTful API + WebSocket(实时消息)
1.2 系统模块划分
典型电商系统包含6大核心模块:
graph TDA[用户模块] -->|JWT| B[订单模块]C[商品模块] --> D[库存模块]E[支付模块] --> F[通知模块]B --> E
- 用户模块:注册/登录/地址管理
- 商品模块:SPU/SKU管理、分类树构建
- 交易模块:购物车、订单生命周期管理
- 支付模块:微信支付对接、对账系统
- 营销模块:优惠券、秒杀活动
- 运维模块:日志分析、监控告警
二、开发环境准备
2.1 基础环境配置
- JDK环境:安装OpenJDK 17 LTS版本,配置
JAVA_HOME环境变量 - 构建工具:Maven 3.8+(推荐使用Wrapper保证环境一致性)
- 数据库配置:
- MySQL 8.0+:启用GTID复制模式
- Redis 6.0+:配置AOF持久化
- 开发工具:
- IntelliJ IDEA Ultimate(支持Spring Boot 3特性)
- 微信开发者工具(稳定版)
2.2 项目初始化
使用Spring Initializr生成项目骨架:
<!-- pom.xml 关键依赖 --><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version></dependency></dependencies>
三、核心功能实现
3.1 用户认证体系
采用OAuth2密码模式实现小程序登录:
@Configuration@EnableAuthorizationServerpublic class AuthServerConfig extends AuthorizationServerConfigurerAdapter {@Overridepublic void configure(ClientDetailsServiceConfigurer clients) {clients.inMemory().withClient("wx_mini_program").secret("{noop}secret").authorizedGrantTypes("password", "refresh_token").scopes("all").accessTokenValiditySeconds(7200);}}
3.2 商品服务开发
使用MyBatis-Plus实现商品CRUD:
@Servicepublic class ProductServiceImpl extends ServiceImpl<ProductMapper, Product> implements ProductService {@Autowiredprivate RedisTemplate<String, Object> redisTemplate;@Overridepublic PageResult<ProductDTO> search(ProductQuery query) {// 1. 查询缓存String cacheKey = "product:search:" + MD5Util.encode(JSON.toJSONString(query));Object cached = redisTemplate.opsForValue().get(cacheKey);if (cached != null) {return JSON.parseObject(cached.toString(), new TypeReference<PageResult<ProductDTO>>(){});}// 2. 数据库查询Page<Product> page = new Page<>(query.getPageNum(), query.getPageSize());QueryWrapper<Product> wrapper = new QueryWrapper<>();// 构建查询条件...IPage<Product> result = baseMapper.selectPage(page, wrapper);// 3. 写入缓存(设置10分钟过期)redisTemplate.opsForValue().set(cacheKey, result, 10, TimeUnit.MINUTES);return PageResult.success(result);}}
3.3 微信支付集成
实现JSAPI支付流程:
@RestController@RequestMapping("/api/pay")public class PayController {@Autowiredprivate WxPayService wxPayService;@PostMapping("/jsapi")public Result<WxPayUnifiedOrderResponse> createJsapiOrder(@RequestBody PayOrderDTO dto) {// 1. 生成预支付交易单WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();request.setBody("商品描述");request.setOutTradeNo(dto.getOrderNo());request.setTotalFee(dto.getAmount().multiply(new BigDecimal(100)).intValue());request.setSpbillCreateIp("用户IP");request.setTradeType("JSAPI");request.setOpenid(dto.getOpenid());// 2. 调用支付接口WxPayUnifiedOrderResponse response = wxPayService.unifiedOrder(request);// 3. 返回支付参数Map<String, String> payParams = new HashMap<>();payParams.put("appId", response.getAppid());payParams.put("timeStamp", String.valueOf(System.currentTimeMillis() / 1000));payParams.put("nonceStr", WXPayUtil.generateNonceStr());payParams.put("package", "prepay_id=" + response.getPrepayId());payParams.put("signType", "MD5");payParams.put("paySign", WXPayUtil.generateSignature(payParams, "商户密钥"));return Result.success(response);}}
四、性能优化实践
4.1 数据库优化
- 索引策略:
- 订单表按
user_id + status建立复合索引 - 商品表对
category_id + sale_count建立索引
- 订单表按
- 读写分离:
spring:datasource:dynamic:primary: masterstrict: falsedatasource:master:url: jdbc
//master:3306/dbslave1:url: jdbc
//slave1:3306/dbslave2:url: jdbc
//slave2:3306/db
4.2 缓存策略
- 热点数据缓存:
- 商品详情页缓存TTL设为5分钟
- 分类数据采用多级缓存(本地缓存+分布式缓存)
- 缓存穿透防护:
public Object getWithPenetrationProtect(String key) {Object value = redisTemplate.opsForValue().get(key);if (value == null) {// 1. 从数据库查询value = dbQuery(key);if (value != null) {// 2. 写入缓存(设置短过期时间)redisTemplate.opsForValue().set(key, value, 1, TimeUnit.MINUTES);} else {// 3. 写入空值(防止频繁查询)redisTemplate.opsForValue().set(key, "", 10, TimeUnit.SECONDS);}}return value;}
五、部署与运维
5.1 容器化部署
使用Docker Compose编排服务:
version: '3.8'services:app:image: openjdk:17-jdk-slimworking_dir: /appvolumes:- ./target/app.jar:/app/app.jarcommand: ["java", "-jar", "app.jar"]ports:- "8080:8080"depends_on:- redis- mysqlredis:image: redis:6-alpineports:- "6379:6379"volumes:- redis_data:/datamysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: passwordMYSQL_DATABASE: ecommerceports:- "3306:3306"volumes:- mysql_data:/var/lib/mysqlvolumes:redis_data:mysql_data:
5.2 监控方案
- Prometheus配置:
management:endpoints:web:exposure:include: prometheusmetrics:export:prometheus:enabled: true
- 关键指标监控:
- QPS(每秒请求数)
- 错误率(5xx响应占比)
- 数据库连接池使用率
- 缓存命中率
本实战指南完整覆盖了从环境搭建到生产部署的全流程,通过12个核心模块的详细讲解和20+代码示例,帮助开发者快速掌握Spring Boot 3与微信小程序协同开发技术。项目代码已开源至某托管仓库,提供完整的Postman接口文档和压力测试报告,适合3年以上经验的Java开发者作为技术升级参考。