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

【电商项目】新手CRUD踩坑记录与问题复盘——删除

看过上一期踩坑复盘的小伙伴都知道我在启动就报错了,这篇也是😓

一、非法状态异常

1.1 找不 Dubbo 服务的服务提供者

意思是:状态非法异常,找不到AdminService这个 Dubbo 服务的服务提供者

常见根因

  1. 提供者服务未启动:提供 AdminService 的后端项目没有运行,没有向 Nacos 注册服务
  2. 注册中心不一致:消费者、提供者连接的不是同一个 Nacos 地址 / 命名空间
  3. 网络不通:本机无法 ping 通 / 访问虚拟机
  4. 启动类缺失@EnableDubbo注解:Dubbo 客户端未初始化,无法解析 @DubboReference 订阅服务
  5. @DubboReference未配置 check=false:默认启动强校验服务存在,提供者离线直接启动崩溃
  6. 提供者未成功注册到 Nacos
  7. 依赖错误

小编排查发现了我问题属于4、5、7:

问题 1:ManagerApiApplication启动类 缺少@EnableDubbo注解,Dubbo 无法正确扫描和处理@DubboReference

问题 2:shopping_manager_api的 pom.xml 中直接依赖了shopping_admin_service,微服务之间通过 Dubbo RPC 通信,不应有 Maven 直接依赖,只需依赖shopping_common(包含接口定义)。(我当时直接copy了别的模块下的pom,忘修改了😓)

问题3:应添加check = false让应用在提供者未启动时也能正常启动。

注解速忆:

(由于学习注解是速通的,很多记得不清晰,在此记录一下)

  • @EnableDubbo:开启 dubbo 功能,识别 @Reference 消费者、@Service 提供者注解。 【SpringBoot 默认不加载 Dubbo 组件,该注解激活 Dubbo 的 Bean 注册、RPC 通信逻辑。】

  • @EnableDiscoveryClient:开启服务注册与发现功能。 【让项目启动后主动把自身服务注册到 Nacos/Eureka 等注册中心,同时能拉取其他服务节点。】

  • @RefreshScope:Nacos 配置变更时动态刷新 Bean 配置。 【普通加载配置是一次性的,注解标记的 Bean 会监听配置中心推送更新。】

  • @MapperScan("com. ..."):扫描 mapper,启动时加载 mapper 接口。 【直接统一扫描,避免 Mapper 无法被注入报错。】

  • @DubboReference(check = false) : 默认启动时 Dubbo 会校验对应服务提供者是否在线,无提供者直接启动报错;设为 false 启动不校验,调用时才判断,适配服务启动顺序不固定场景;true时,容器初始化必须找到服务提供者,找不到直接启动失败


1.2 请求参数类型适配异常

意思是:非法状态异常:可选 long 类型参数id传值为空,但该参数被定义为基本数据类型,基本类型无法接收 null 值

我当时看这个没明白,后来知道白话就是:

我的接口参数写的是long id(基本数据类型),前端没传 id 参数,Spring 要给这个参数赋值null,long是基本类型,默认值为0,不能接受null,直接抛出异常。

解决方案:long id改成Long id(包装类,支持 null)并显式添加@RequestParam注解

这里区分一下这两种路径参数注解:

  • @PathVariable从 URL 路径中提取参数(如/delete/1中的1
  • @RequestParam从查询参数中提取(如/delete?id=1

1.3 启动顺序错误

启动报错如下:

问题:Dubbo 服务注册发现问题(服务提供者不可用

根因

  1. 启动顺序错误:先启动 Dubbo 消费者,提供者还未启动、未注册到 Nacos
  2. 次要诱因:提供者漏写@DubboService注解,服务不会注册注册中心,消费者同样找不到

1.4 总结发现这类错误

经过这几个报错,小编总结发现

IllegalStateException报错在 SpringWeb/Dubbo 开发里,绝大多数场景都是

「配置 / 注解 / 参数 / 组件状态不合法」导致的

其次就是1.3这种框架层面启动异常

还有一种就是架构层面类文件放置的问题,这都是小编遇到过的,可供排查。(我当时给service接口放非common模块下了)

二、测试报错404

之前测试报错500,解决之后有报了404。一开始我对404的报错原因有误解,这里记录一下:

404含义:

服务器接收到请求,但找不到对应接口/资源

可能成因:

  1. 请求路径错误:URL地址拼写、大小写、上下文路径写错。
  2. 请求方式不匹配:接口是@PostMapping,前端用GET访问,反之亦然。
  3. Controller未被Spring扫描:启动类扫描范围没包含控制器包,接口未注册。
  4. @RequestMapping类+方法拼接路径错误:类上前缀+方法路径拼接和访问地址对不上。
  5. 静态资源不存:访问html、图片等静态文件路径错误。
  6. 接口被拦截器直接放行跳过、重定向错误

检查发现是参数接收注解 + 请求地址不匹配导致的。

纠正后又报错了,报错显示 是端口被占用了,直接杀死端口就好了,了解到成因是因为,可能之前在关闭运行的时候没有关闭干净导致的。

查找占用 xxx 端口的进程:netstat -ano | findstr 20881

根据查到的 PID 杀掉进程(把 <PID> 整个替换):taskkill /PID <PID> /F

http://www.cnnetsun.cn/news/4000199.html

相关文章:

  • 南昌网站建设公司怎么选才能不掉坑?南昌做网站公司深度避坑指南与真实心声
  • 基于LSTM的时间序列服务器负载预测:从数据预处理到模型部署的完整实战
  • AI工程化实践:破解效率悖论,从Prompt工程到RAG架构的落地指南
  • 加密音乐打不开?5分钟上手Unlock-Music,免费解锁12种主流加密格式
  • 英雄联盟客户端终极辅助工具 League Akari:从排位连跪到把把稳赢的免费上分神器
  • Sunshine游戏串流:如何搭建你的私人云游戏服务器终极指南
  • 我那3个G的B站缓存差点白下:用m4s-converter格式转换合并MP4的真实通关记录
  • BFS算法详解:从迷宫寻路到社交网络的最短路径实现
  • 《从零入门Linux系统篇(十九):进程篇·三——僵尸进程与孤儿进程:深入理解进程退出与回收机制》
  • 基于工作过程的商务网站建设 网页制作实战指南:如何打造高转化的商业级官网
  • 阿里云-cdn的证书到期-续期
  • Processing结合Blender打造水下生物质感:从代码生成到3D渲染全流程
  • 项目建设网站大全:资深从业者推荐的32个权威资源汇总与深度避坑指南
  • AI Agent核心技术栈与垂直领域开发实战指南
  • 神奇代码岛辅助功能实践:从ARIA到键盘导航的无障碍编程探索
  • 网站建设需要考虑因素有哪些?新手必看避坑指南及全流程解析
  • SQL Server图片存储实战:VARBINARY(MAX)方案设计与性能优化
  • 洛雪音乐自定义解析源 lx-source:3 步搭建你的专属音乐解析服务
  • 非技术人如何看懂大模型技术方案
  • Python网络爬虫实战:从天眼查高效采集企业数据的技术解析
  • 揭秘宿迁城乡建设监督网站:百姓身边的透明窗与便民通
  • Mac 本地安装 MySQL 学习指南
  • FanControl 风扇控制软件完整指南:5 步调校 Windows 风扇转速
  • 【字串】【困难】滑动窗口最大值
  • 【收藏必看2026版】普通人零门槛入局AI!大模型成程序员高薪最优解
  • Python环境搭建与核心语法实战:从入门到工程化的十年经验总结
  • 打造真正有利于优化的网站建设方案,从底层逻辑重构你的网站流量
  • Perplexity Agent API与Kimi K3实战:构建自主任务执行AI智能体
  • AI编程助手生态之争:Codex与Claude Code的部署自由与配置实战
  • 大气层系统Atmosphere:Nintendo Switch破解终极完整指南