当前位置: 首页 > news >正文

苍穹外卖Day3

🌟 苍穹外卖项目实战:从数据库到接口的全链路问题解决指南

本文记录了苍穹外卖项目开发过程中遇到的关键问题及解决方案,涵盖数据库连接、接口测试、全局参数传递、服务器配置等核心环节,助你快速定位并解决类似问题!


🚀 一、数据库连接问题:1045访问拒绝

问题描述

2025-07-13 09:10:56.762 ERROR 2488 --- [Create-42898626] com.alibaba.druid.pool.DruidDataSource: 
create connection SQLException, url: jdbc:mysql://localhost:3306/sky_take_out?serverTimezone=Asia/Shanghai...
errorCode 1045, state 28000java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

✅ 解决方案

  1. 检查MySQL服务状态

    # 管理员命令行
    net start mysql
    
  2. 验证登录凭据

    mysql -u root -p
    # 输入密码验证
    
  3. 修正配置文件

    • 检查application.yml中的数据库密码
    • 确保用户名/密码正确(通常为root/123456
  4. 权限检查(备用)

    -- 查看用户权限
    SHOW GRANTS FOR 'root'@'localhost';-- 授权全局权限(谨慎使用)
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
  5. IDEA内嵌数据库(可视化操作)

    • Database面板 > New > Data Source > MySQL
    • 直接创建表结构和测试数据

🔐 二、接口测试401未授权问题

问题现象

在接口文档测试新增员工功能时,返回响应码401

✅ 解决方案

  1. 定位拦截器

    • 检查JwtTokenAdminInterceptor等拦截器
    public class JwtTokenAdminInterceptor implements HandlerInterceptor {// 令牌校验逻辑
    }
    
  2. 获取有效Token

    • 通过管理员登录接口获取Token
    • 在Swagger/Knife4j文档中测试登录接口
  3. 添加全局参数

    • 在接口文档中添加Header参数
    参数名称: token
    参数值: eyJhbGciOiJIUzI1NiJ9...(登录返回的Token)
    
  4. 调试技巧

    • ALT + F8:查看变量值
    • Ctrl + F5:强制刷新
    • Ctrl + 左键单击:跳转到定义

📡 三、全局参数Token接收失败问题

问题现象

接口文档设置了全局参数,但代码中无法获取Token值

✅ 解决方案

  1. 添加调试日志

    // 在拦截器中添加日志输出
    log.info("接收到的Token: {}", token);
    
  2. 设置断点调试

    • 在日志输出行设置断点
    • 调试模式启动项目
  3. 检查参数名称一致性

    # application.yml
    sky:jwt:admin-token-name: token  # 确保与接口文档一致
    
  4. 多途径获取Token

    // 优先从Header获取,其次从参数获取
    String token = request.getHeader(tokenName);
    if(token == null) {token = request.getParameter(tokenName);
    }
    

⚠️ 四、IIS与Nginx端口冲突问题

背景知识

  • IIS:微软Windows系统的Web服务器,默认占用80端口
  • Nginx:高性能HTTP和反向代理服务器

✅ 解决方案

  1. 停止IIS服务

    net stop was /y
    net stop w3svc
    
  2. 清除HTTP.sys注册

    netsh http delete urlacl url=http://+:80/
    
  3. 重启Nginx

    cd F:\project\cangqiong\code\day01\nginx-1.20.2
    taskkill /IM nginx.exe /F
    start nginx
    
  4. 验证端口占用

    netstat -ano | findstr :80
    

🛠️ 五、SQL异常:唯一键冲突

问题描述

### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: 
Duplicate entry 'zhangsan' for key 'idx_username'

✅ 解决方案

  1. 在这里插入图片描述
    添加在全局异常处理器
 @ExceptionHandler
public Result exceptionHandler(SQLIntegrityConstraintViolationException ex){String message = ex.getMessage();log.error("异常信息:{}", message);if(message.contains("Duplicate entry")){String[] split = message.split(" ");String msg = split[2] + "已存在";return Result.error(msg);}else{return Result.error("未知错误");}
}

注解一定要加
在这里插入图片描述


💡 项目经验总结

  1. 数据库连接问题:80%的数据库访问错误源于配置错误
  2. 接口安全设计:JWT拦截器是保护API的第一道防线
  3. 端口冲突:生产环境推荐使用Nginx反向代理解决端口复用
  4. 异常处理:全局异常处理器能极大提升系统健壮性
  5. 调试技巧
    • 合理使用日志级别(DEBUG/INFO/ERROR)
    • 善用IDE的断点调试功能
    • 接口文档与代码保持同步更新

最佳实践:开发阶段保持DEBUG日志级别,生产环境调整为ERROR级别


最后的致谢
如果本文对您有帮助,请点赞👍、关注❤️、收藏⭐️。您的支持是我持续分享的动力!

坚持就是胜利

http://www.dtcms.com/a/277955.html

相关文章:

  • python kivy 打包apk
  • 基于手势识别完成ESP32C3控制8位继电器实现智能鱼缸整体方案设计
  • “找到一个或多个多重定义的符号“(LNK2005 或 LNK1169)
  • JAVA 反射总结
  • 开源工具DeepFilterNet:实时语音降噪
  • SQL的初步学习(二)(以MySQL为例)
  • 第四章 城市给水排水处理厂站工程
  • 双向链表:前后遍历的艺术
  • 动态规划题解_将一个数字表示成幂的和的方案数【LeetCode】
  • 高压空气冲击炮cad【3张】三维图+设计说明书
  • Python 学习之路(十)--常见算法实现原理及解析
  • 智慧公安信息化建设解决方案PPT(63页)
  • Matlab的命令行窗口内容的记录-利用diary记录日志/保存命令窗口输出
  • 什么是 MVP?产品从0到1的关键一步
  • OSPF 基础实验
  • X00211-基于残差edge-graph注意力机制的深度强化学习优化车辆路径问题
  • HarmonyOS从入门到精通:动画设计与实现之八 - 高级动画技巧(二)
  • [Plecs基础知识系列]基于Plecs的半导体热仿真方法(实战篇)_1.建立电路模型
  • C语言基础知识--文件读写(一)
  • RAID磁盘冗余技术深度解析
  • WEB渗透
  • 【LeetCode100】--- 6.三叔之和【思维导图---复习回顾】
  • 基于Java日志平台的访问链路追踪实战
  • JAVA并发——synchronized的实现原理
  • C#特性:从元数据到框架基石的深度解析
  • 强化学习初探及OREAL实践
  • Word中的批注显示与修订显示
  • 【vs2022】 error C2338: Unicode support requires compiling with /utf-8
  • 时间的弧线,逻辑的航道——标准单元延迟(cell delay)的根与源
  • [附源码+数据库+毕业论文+答辩PPT+部署教程+配套软件]基于SpringBoot+MyBatis+MySQL+Maven+Vue实现的交流互动管理系统