【电商项目】新手CRUD踩坑记录与问题复盘——删除
看过上一期踩坑复盘的小伙伴都知道我在启动就报错了,这篇也是😓
一、非法状态异常
1.1 找不 Dubbo 服务的服务提供者

意思是:状态非法异常,找不到 AdminService 这个 Dubbo 服务的服务提供者。
常见根因
- 提供者服务未启动:提供 AdminService 的后端项目没有运行,没有向 Nacos 注册服务
- 注册中心不一致:消费者、提供者连接的不是同一个 Nacos 地址 / 命名空间
- 网络不通:本机无法 ping 通 / 访问虚拟机
- 启动类缺失 @EnableDubbo 注解:Dubbo 客户端未初始化,无法解析 @DubboReference 订阅服务
- @DubboReference 未配置 check=false:默认启动强校验服务存在,提供者离线直接启动崩溃
- 提供者未成功注册到 Nacos
- 依赖错误
小编排查发现了我问题属于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 服务注册发现问题(服务提供者不可用)
根因
- 启动顺序错误:先启动 Dubbo 消费者,提供者还未启动、未注册到 Nacos
- 次要诱因:提供者漏写
@DubboService注解,服务不会注册注册中心,消费者同样找不到
1.4 总结发现这类错误
经过这几个报错,小编总结发现
IllegalStateException 报错在 SpringWeb/Dubbo 开发里,绝大多数场景都是「配置 / 注解 / 参数 / 组件状态不合法」导致的
其次就是1.3这种框架层面启动异常
二、测试报错404
之前测试报错500,解决之后有报了404。一开始我对404的报错原因有误解,这里记录一下:
404含义:
服务器接收到请求,但找不到对应接口/资源。
可能成因:
- 请求路径错误:URL地址拼写、大小写、上下文路径写错。
- 请求方式不匹配:接口是
@PostMapping,前端用GET访问,反之亦然。 - Controller未被Spring扫描:启动类扫描范围没包含控制器包,接口未注册。
@RequestMapping类+方法拼接路径错误:类上前缀+方法路径拼接和访问地址对不上。- 静态资源不存:访问html、图片等静态文件路径错误。
- 接口被拦截器直接放行跳过、重定向错误。
检查发现是 参数接收注解 + 请求地址不匹配 导致的。
纠正后又报错了,报错显示 是端口被占用了,直接杀死端口就好了,了解到成因是因为,可能之前在关闭运行的时候没有关闭干净导致的。
查找占用 xxx 端口的进程: netstat -ano | findstr 20881
根据查到的 PID 杀掉进程(把 <PID> 整个替换): taskkill /PID <PID> /F
更多推荐


所有评论(0)