当前位置: 首页 > 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.lryc.cn/news/587308.html

相关文章:

  • markdown-it-mathjax3-pro —— 新一代 Markdown 数学公式渲染插件
  • vue的优缺点
  • 框架和库的区别
  • day16~17-系统负载高故障与磁盘管理
  • muduo概述
  • 电商系统未来三年趋势:体验升级、技术赋能与模式重构
  • ASP.NET Core 中的延迟注入:原理与实践
  • 【UE教程/进阶】UE中的指针与引用
  • 应用层协议和JSON的使用
  • gcc 源码阅读---程序入口
  • 面试150 从前序与中序遍历构造二叉树
  • python赤道上空的大气环流剖面图(纬向-高度剖面)
  • Node.js 聊天内容加密解密实战教程(含缓存密钥优化)
  • 【elementUI踩坑记录】解决 el-table 固定列 el-table__fixed 导致部分滚动条无法拖动的问题
  • QT控件命名简写
  • Burp suite的下载安装基础用法(密码喷洒,密码爆破)
  • Linux 系统——管理 MySQL
  • 超市管理系统
  • 问题记录:Fastjson序列化-空值字段处理
  • 数据结构 Map和Set
  • 零基础完全理解视觉语言模型(VLM):从理论到代码实践
  • ArkUI Inspector工具用法全解析
  • Redis 命令总结
  • react中为啥使用剪头函数
  • Redis技术笔记-从三大缓存问题到高可用集群落地实战
  • 【SpringBoot】注册条件+自动配置原理+自定义starter
  • 通信网络编程5.0——JAVA
  • 【STM32实践篇】:F407 时钟系统
  • [2025CVPR]GNN-ViTCap:用于病理图像分类与描述模型
  • XML实体扩展注入与防御方案