1. 项目背景与技术选型
这个交友平台项目采用SpringBoot+Vue的前后端分离架构,是当前企业级应用开发的主流模式。我在实际开发中发现,这种架构特别适合需要快速迭代的社交类应用。后端用SpringBoot可以快速搭建RESTful API,前端用Vue则能实现流畅的用户交互体验。
技术栈选择上,SpringBoot 2.7.x + Vue 3的组合经过了多个线上项目的验证。SpringBoot内置Tomcat服务器,简化了配置;Vue的响应式特性则完美适配交友平台这类需要实时更新的场景。数据库选用MySQL 8.0,配合MyBatis-Plus作为ORM框架,既保证了性能又简化了开发。
提示:初学者常犯的错误是直接使用最新版本。建议SpringBoot用2.7.x稳定版,Vue用3.2.x版本,避免踩坑。
2. 核心功能模块设计
2.1 用户系统实现
用户模块采用JWT进行认证,这是我经过多个项目验证的可靠方案。核心代码在AuthController中:
java复制@PostMapping("/login")
public Result login(@RequestBody LoginDto loginDto) {
// 1. 校验用户名密码
User user = userService.login(loginDto);
// 2. 生成JWT
String token = JwtUtil.generateToken(user.getId());
// 3. 返回结果
return Result.success(token);
}
前端对应使用axios拦截器处理token:
javascript复制// request拦截器
service.interceptors.request.use(
config => {
if (store.getters.token) {
config.headers['Authorization'] = 'Bearer ' + getToken()
}
return config
},
error => {
return Promise.reject(error)
}
)
2.2 好友匹配算法
交友平台的核心在于匹配算法。我们采用基于标签的协同过滤算法:
- 用户注册时选择兴趣标签(最多10个)
- 通过余弦相似度计算用户匹配度
- 加入活跃度权重(最近登录的用户优先推荐)
SQL实现关键部分:
sql复制SELECT
u2.user_id,
SUM(t1.weight * t2.weight) /
(SQRT(SUM(t1.weight * t1.weight)) * SQRT(SUM(t2.weight * t2.weight))) AS similarity
FROM user_tags t1
JOIN user_tags t2 ON t1.tag_id = t2.tag_id AND t1.user_id != t2.user_id
JOIN users u2 ON t2.user_id = u2.user_id
WHERE t1.user_id = #{currentUserId}
GROUP BY u2.user_id
ORDER BY similarity DESC
LIMIT 20;
3. 前后端交互细节
3.1 API设计规范
我们采用RESTful风格设计API,这是我在实际项目中总结的最佳实践:
| 方法 | 路径 | 描述 |
|---|---|---|
| POST | /api/users | 注册新用户 |
| GET | /api/users/ | 获取用户详情 |
| PUT | /api/users/ | 更新用户信息 |
| GET | /api/friends | 获取好友列表 |
| POST | /api/friends/ | 添加好友 |
接口文档使用Swagger生成,配置如下:
java复制@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.demo.controller"))
.paths(PathSelectors.any())
.build();
}
}
3.2 跨域问题解决
开发阶段常见的跨域问题,我的解决方案是在后端配置:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.maxAge(3600);
}
}
生产环境建议使用Nginx反向代理解决跨域,更安全高效。
4. 数据库设计与优化
4.1 核心表结构
用户表设计示例:
sql复制CREATE TABLE `users` (
`user_id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(100) NOT NULL,
`avatar` varchar(255) DEFAULT NULL,
`gender` tinyint DEFAULT '0',
`birthday` date DEFAULT NULL,
`city` varchar(50) DEFAULT NULL,
`bio` varchar(255) DEFAULT NULL,
`status` tinyint DEFAULT '1',
`create_time` datetime DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`user_id`),
UNIQUE KEY `idx_username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
4.2 查询优化实践
对于好友关系查询,我采用了空间换时间的策略:
- 建立好友关系索引:
sql复制ALTER TABLE user_relations ADD INDEX idx_user_pair(user_id, friend_id);
- 使用覆盖索引优化查询:
sql复制EXPLAIN SELECT friend_id FROM user_relations
WHERE user_id = 123 AND status = 1;
- 对大表进行分表处理,按用户ID哈希分10张表
5. 项目部署实战
5.1 后端打包部署
使用Maven打包SpringBoot项目:
bash复制mvn clean package -DskipTests
生产环境启动命令(内存优化):
bash复制java -Xms512m -Xmx1024m -jar your-application.jar \
--spring.profiles.active=prod \
--server.port=8080
5.2 前端部署方案
Vue项目打包:
bash复制npm run build
Nginx配置示例:
nginx复制server {
listen 80;
server_name yourdomain.com;
location / {
root /usr/share/nginx/html;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
6. 开发中的典型问题解决
6.1 文件上传大小限制
SpringBoot默认文件上传限制为1MB,需要调整:
yaml复制spring:
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
6.2 Vue路由模式问题
history模式需要后端配合:
javascript复制const router = createRouter({
history: createWebHistory(),
routes
})
6.3 数据库连接池配置
建议使用HikariCP连接池:
yaml复制spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
idle-timeout: 30000
max-lifetime: 1800000
connection-timeout: 30000
7. 项目扩展建议
基于这个基础框架,可以考虑以下扩展方向:
- 即时通讯功能:集成WebSocket实现实时聊天
- 推荐算法优化:加入机器学习模型提升匹配精度
- 微服务改造:将用户服务、匹配服务等拆分为独立服务
- 移动端适配:使用uni-app开发跨平台应用
我在实际项目中发现,交友平台最需要关注的是性能优化和安全性。特别是用户隐私数据,一定要做好加密处理。建议使用Spring Security进行权限控制,敏感字段如密码必须加盐哈希存储。
