1. 苍穹外卖项目开发环境搭建实战
作为一名刚接触苍穹外卖项目的开发者,我在环境搭建和初期开发过程中遇到了不少典型问题。这些问题看似简单,但往往能卡住新手很长时间。下面我将详细记录这些问题的排查过程和解决方案,希望能帮助其他开发者少走弯路。
1.1 前后端联调问题排查
前后端分离项目中,联调阶段是最容易出问题的环节。我在Day01就遇到了两个典型问题:
1.1.1 登录界面转圈无法跳转问题
这个问题表现为:点击登录按钮后,页面一直转圈但无法跳转。通过以下步骤排查:
-
检查网络请求:打开浏览器开发者工具,发现登录请求处于pending状态,没有收到响应。
-
查看后端日志:在Idea控制台发现了关键错误信息:
code复制create connection SQLException url: jdbc:mysql://192.168.8.128:3306/sky_take_out Communications link failure Caused by: java.net.ConnectException: Operation timed out (Connection timed out) -
问题定位:明显是数据库连接失败,检查发现配置文件中使用的是远程数据库地址(192.168.8.128),而实际上应该连接本地数据库。
-
解决方案:修改
application-dev.yml文件中的数据库配置:yaml复制sky: datasource: driver-class-name: com.mysql.cj.jdbc.Driver host: localhost port: 3306 database: sky_take_out username: root password: "your_mysql_password"
提示:开发环境建议使用localhost而非IP地址,避免因网络配置问题导致连接失败。同时确保MySQL服务已启动,且账号密码正确。
1.1.2 登录密码错误问题
解决连接问题后,又遇到了密码错误提示:
-
初始尝试:按照网络文档,将employee表中的password字段值改为
e10adc3949ba59abbe56e057f20f883e(即123456的MD5值),但登录仍然失败。 -
深入排查:发现直接修改数据库值可能未触发密码加密逻辑。正确的做法是使用SQL的MD5函数更新:
sql复制UPDATE employee SET password = MD5('123456') WHERE username = 'admin'; -
原理说明:苍穹外卖系统在代码层面可能对密码进行了二次加密处理,直接写入MD5值可能不匹配系统的加密逻辑。使用SQL的MD5函数能确保与系统加密方式一致。
1.2 Swagger接口测试问题
在Day02开发员工管理功能时,使用Swagger测试接口遇到了参数传递问题:
1.2.1 x-www-form-urlencoded参数空白问题
当使用x-www-form-urlencoded格式测试接口时,参数显示为空白。解决方法:
-
检查DTO类:确保QueryDTO类有
@Data注解,否则Swagger无法识别字段。 -
检查Controller:如果使用GET请求,需要移除
@RequestBody注解,因为GET请求的参数是通过URL传递的,而不是请求体。 -
数据类型处理:将DTO中的
int类型改为Integer,因为基本类型在未传值时默认为0,可能导致逻辑错误,而包装类可以为null。
经验分享:在前后端联调时,建议先用Postman等工具单独测试后端接口,确认接口正常工作后再进行前后端联调,可以更快定位问题所在。
2. 数据库连接配置详解
2.1 正确配置数据库连接
苍穹外卖项目的数据库配置在application-dev.yml中,常见配置项包括:
yaml复制spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/sky_take_out?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: your_password
关键配置说明:
useSSL=false:开发环境可以禁用SSL连接serverTimezone:必须设置时区,避免时间转换问题- 密码建议使用环境变量或配置中心管理,不要硬编码在配置文件中
2.2 连接池优化建议
对于生产环境,还需要配置连接池参数:
yaml复制spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
这些参数需要根据实际业务量和服务器配置进行调整。
3. 常见问题排查手册
3.1 数据库相关问题
-
连接超时:
- 检查MySQL服务是否启动
- 检查防火墙是否开放3306端口
- 检查连接字符串中的IP、端口是否正确
-
密码错误:
- 确认数据库用户权限
- 检查密码是否包含特殊字符需要转义
- 尝试在MySQL命令行直接连接测试
-
时区问题:
- 在连接字符串中添加
serverTimezone=Asia/Shanghai - 检查数据库服务器时区设置
- 在连接字符串中添加
3.2 接口测试问题
-
Swagger参数不显示:
- 检查DTO类是否有
@Data或@ApiModel注解 - 确认参数类型是否使用包装类而非基本类型
- 检查Controller方法参数注解是否正确
- 检查DTO类是否有
-
跨域问题:
- 开发环境可以在Controller添加
@CrossOrigin - 生产环境建议通过网关统一处理
- 开发环境可以在Controller添加
-
参数绑定失败:
- 检查参数名是否与DTO字段名一致
- 复杂对象需要使用
@RequestBody - GET请求参数需要使用
@RequestParam
4. 开发环境最佳实践
4.1 本地开发环境配置
-
数据库:
- 建议使用Docker运行MySQL,避免污染本地环境
- 初始化脚本统一管理,方便团队共享
-
IDE配置:
- 安装Lombok插件
- 配置合理的JVM参数
- 使用Git管理代码,合理使用.gitignore
-
依赖管理:
- 定期执行
mvn dependency:tree检查依赖冲突 - 固定关键依赖的版本号
- 定期执行
4.2 调试技巧
-
日志级别调整:
yaml复制logging: level: root: info com.sky: debug -
断点调试:
- 条件断点
- 异常断点
- 字段访问断点
-
接口测试:
- 使用Postman保存测试用例
- 利用Swagger的
Try it out功能 - 编写单元测试覆盖关键逻辑
在实际开发中,遇到问题时要学会利用日志和调试工具,先理清问题现象,再分析可能的原因,最后有针对性地验证解决方案。保持耐心和系统性思维是解决问题的关键。