1. 项目背景与核心需求
校园闲置物品交易一直是个高频刚需场景。每到毕业季或学期初,学生们总在寻找二手教材、自行车、小家电等物品,同时也有大量闲置物品需要处理。传统的信息发布方式(如校园BBS、微信群)存在信息杂乱、交易不安全、缺乏信用体系等问题。
这个系统正是为了解决以下痛点:
- 信息不对称:买卖双方难以高效匹配
- 交易风险:线下交易缺乏保障机制
- 资源浪费:大量可用物品被直接丢弃
- 管理困难:个人发布的信息难以长期维护
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与架构设计
2.1 技术栈组合
选择Spring Boot作为基础框架主要基于:
- 快速开发:自动配置、起步依赖简化了项目搭建
- 生态丰富:与MySQL、Redis等组件集成成熟
- 微服务友好:便于后期扩展为分布式系统
mermaid复制graph TD
A[前端] --> B[Spring Boot]
B --> C[MySQL]
B --> D[Redis]
B --> E[文件存储]
2.2 数据库设计
核心表结构设计考虑:
- 用户表:采用手机号+密码基础认证
- 商品表:包含状态字段(上架/下架/已租售)
- 订单表:记录交易全流程
- 评价表:构建信用体系
sql复制CREATE TABLE `item` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`title` varchar(100) NOT NULL,
`price` decimal(10,2) NOT NULL,
`status` tinyint NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 核心功能实现
3.1 商品发布流程
采用多级分类+智能推荐:
- 前端上传图片时先压缩
- 后端使用阿里云OSS存储
- 自动提取图片特征建立索引
java复制@PostMapping("/item")
public Result publishItem(@Valid @RequestBody ItemDTO dto) {
// 1. 参数校验
// 2. 图片处理
// 3. 持久化存储
return Result.success(itemId);
}
3.2 交易保障机制
关键设计点:
- 保证金制度:租售双方需冻结部分金额
- 实名认证:对接学信网数据
- 聊天记录留存:使用WebSocket实现
4. 性能优化实践
4.1 缓存策略
采用多级缓存方案:
- 热点数据:Redis缓存
- 本地缓存:Caffeine
- 缓存击穿:使用互斥锁
java复制@Cacheable(value = "items", key = "#id")
public Item getItemById(Long id) {
// 查询数据库
}
4.2 搜索优化
结合Elasticsearch实现:
- 中文分词:IK Analyzer
- 相关性排序:BM25算法
- 拼音搜索:自定义analyzer
5. 部署与监控
5.1 容器化部署
使用Docker Compose编排:
yaml复制version: '3'
services:
app:
image: java:8
ports:
- "8080:8080"
5.2 监控方案
集成Prometheus+Granfa:
- JVM监控
- 接口耗时统计
- 异常告警
6. 踩坑经验
- 事务问题:
- 分布式事务使用Seata
- 本地事务注意传播特性
- 并发控制:
- 乐观锁版本号
- 悲观锁select for update
重要提示:校园场景要特别注意数据合规,学生个人信息需加密存储
