1. 项目背景与需求分析
校园二手交易一直是个高频刚需场景。每到毕业季,大量教材、电子产品、生活用品被低价处理;而新生入学时又急需采购这些物品。传统的QQ群、微信群交易方式存在信息杂乱、交易风险高、难以搜索等问题。
我去年为某高校开发的"校园跳蚤市场管理系统"正是为了解决这些痛点。系统基于Vue+SpringBoot技术栈,实现了商品发布、智能搜索、在线沟通、信用评价等完整功能链。上线三个月内累计促成交易2300余笔,用户留存率达到68%。
2. 技术选型与架构设计
2.1 前端技术栈
选择Vue.js 3.x作为前端框架主要基于:
- 组合式API更适合复杂业务逻辑管理
- 与Element Plus组件库完美契合
- 完善的DevTools调试体验
实际开发中特别推荐以下工具链:
bash复制# 推荐开发环境
npm install -g @vue/cli
vue create flea-market-frontend
cd flea-market-frontend
npm install element-plus axios vue-router pinia
2.2 后端技术栈
SpringBoot 2.7.x的选择考量:
- 内嵌Tomcat简化部署
- Starter机制快速集成MyBatis-Plus
- Actuator提供完善监控
关键依赖配置示例:
xml复制<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
2.3 系统架构图
code复制前端层(Vue) ←WebSocket→ 网关层(Nginx)
↓
应用层(SpringBoot)
↓
服务层(MyBatis Plus)
↓
数据层(MySQL+Redis)
3. 核心功能实现
3.1 商品智能搜索
采用Elasticsearch实现多维度搜索:
java复制// 商品索引结构示例
@Document(indexName = "goods")
public class GoodsES {
@Id
private Long id;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String title;
@Field(type = FieldType.Keyword)
private String category;
@Field(type = FieldType.Double)
private Double price;
// 省略其他字段
}
搜索接口性能优化方案:
- 使用boolQuery组合多种条件
- 对价格范围采用filter缓存
- 关键词高亮处理
3.2 即时通讯系统
基于WebSocket的消息架构:
javascript复制// 前端消息处理
const socket = new WebSocket('wss://yourdomain.com/ws')
socket.onmessage = (event) => {
const msg = JSON.parse(event.data)
if(msg.type === 'CHAT') {
chatStore.addMessage(msg)
} else if(msg.type === 'NOTICE') {
notificationStore.add(msg)
}
}
后端消息路由设计:
java复制@Controller
public class WebSocketController {
@Autowired
private SimpMessagingTemplate template;
@MessageMapping("/chat")
public void handleChat(@Payload ChatMessage message) {
// 消息持久化
chatService.saveMessage(message);
// 实时推送
template.convertAndSendToUser(
message.getReceiverId(),
"/queue/messages",
message
);
}
}
3.3 信用评价体系
采用加权算法计算用户信用分:
code复制信用分 = 基础分(60)
+ 交易成功数×0.5
+ 好评数×1
- 差评数×2
- 投诉数×5
实现防刷机制:
- 同设备多次评价去重
- 敏感词过滤
- 异常评分行为检测
4. 关键问题解决方案
4.1 图片上传优化
采用七牛云OSS存储方案:
- 前端直传减少服务器压力
- 图片压缩策略:
javascript复制// 使用compressorjs压缩 new Compressor(file, { quality: 0.6, maxWidth: 1024, success(result) { uploadToOSS(result) } })
4.2 交易安全防护
- 敏感操作二次验证
- 聊天内容关键词过滤
- 交易流程资金托管
- 登录风控策略:
- 异地登录检测
- 频繁失败锁定
- 设备指纹识别
4.3 性能优化实践
前端优化:
- 路由懒加载
- 图片懒加载
- 接口请求防抖
后端优化:
java复制// MyBatis-Plus二级缓存配置
@Configuration
@EnableCaching
public class RedisConfig {
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
return RedisCacheManager.builder(factory)
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10)))
.build();
}
}
5. 部署与运维方案
5.1 容器化部署
Docker Compose编排示例:
yaml复制version: '3'
services:
frontend:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./dist:/usr/share/nginx/html
backend:
image: openjdk:11-jre
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prod
volumes:
- ./app.jar:/app.jar
command: ["java", "-jar", "/app.jar"]
5.2 监控方案
- SpringBoot Actuator暴露指标
- Prometheus采集数据
- Grafana展示面板
- 关键监控项:
- 接口响应时间P99
- WebSocket连接数
- 数据库连接池使用率
6. 项目演进方向
- 移动端小程序扩展
- 智能推荐算法引入
- 直播带货功能
- 区块链存证
实际开发中发现几个值得注意的点:
- WebSocket连接在移动网络下不稳定,需要增加心跳检测和自动重连
- 商品分类体系最好采用动态可配置方式,我们后期重构花费了大量时间
- 信用评价算法需要保留调整空间,初期版本对差评惩罚过重
这个项目让我深刻体会到:校园场景的系统设计必须考虑学期周期性特点。我们在考试周前观察到交易量激增300%,提前做了服务器扩容才避免服务中断。建议后续开发者在架构设计时就预留弹性扩展能力。
