spring boot 3.x 必须配 spring cloud 2022.x(如2022.0.4)且需jdk 17+;boot 2.7.x 对应 cloud 2021.0.x(最后版2021.0.9);第三方starter避免快照版,查官网release notes确认兼容性。

用什么版本的 Spring Cloud 和 Spring Boot 才不互相打架
Spring Cloud 和 Spring Boot 版本强绑定,配错直接 ClassNotFoundException 或启动失败。官方只维护特定组合,不是“最新配最新”。
- Spring Boot 3.x 必须配 Spring Cloud 2022.x(即
2022.0.4等),且要求 JDK 17+ - Spring Boot 2.7.x 对应 Spring Cloud 2021.0.x(
2021.0.9是最后一个维护版) - 别碰
spring-cloud-starter-alibaba-nacos-discovery这类第三方 starter 的快照版,它常悄悄升级内部依赖,导致NoClassDefFoundError: org/springframework/cloud/client/ServiceInstance
查兼容表最稳的方式是打开 Spring Cloud 官网 Learn 页面,点进对应 Release Train 的 “Release Notes”,里面明确写了支持的 Boot 版本范围。
本地 Nacos 启动后服务注册不上,连 localhost:8848 都打不开
Nacos 默认用嵌入式 Derby 数据库,Windows 下路径含中文或空格、Mac 上 Docker Desktop 权限异常,都可能导致启动卡在 “Starting embedded storage” 不报错也不响应。
- 先确认是否真没起来:执行
ps aux | grep nacos(Mac/Linux)或tasklist | findstr nacos(Win),再 curlhttp://localhost:8848/nacos/v1/console/server/state看返回 - 跳过 Derby:启动时加
-Dnacos.standalone=true -Dnacos.member.list=,并删掉data/derby-data目录再试 - 如果用 Docker,别只跑
docker run -d -p 8848:8848 --name nacos nacos/nacos-server,得加-e MODE=standalone,否则默认集群模式会等其他节点
常见现象是 IDEA 控制台显示 “Registered service with nacos”,但 Nacos 页面看不到实例——大概率是服务端根本没监听成功,别急着改客户端配置。
立即学习“Java免费学习笔记(深入)”;
@EnableDiscoveryClient 没用,DiscoveryClient.getInstances("xxx") 返回空列表
这不是注解失效,而是 Spring Cloud 的自动装配被条件化了。从 Spring Cloud 2020.0 开始,@EnableDiscoveryClient 已废弃,靠 starter 自动触发,但前提是依赖和配置都到位。
- 检查是否漏了
spring-cloud-starter-alibaba-nacos-discovery(或spring-cloud-starter-netflix-eureka-client),光有spring-cloud-commons不行 -
application.yml里必须有spring.cloud.nacos.discovery.server-addr: localhost:8848,不能只写nacos.discovery.server-addr(少前缀会静默忽略) - 如果项目用了
spring.main.web-application-type: none,Web 相关的 DiscoveryClient Bean 根本不会创建,getInstances必然为空
调试时直接在代码里打日志:System.out.println(discoveryClient.getClass()),如果不是 NacosDiscoveryClient,说明自动配置根本没生效。
Feign 调用报 Load balancer does not have available server for client
这个错误不是网络不通,是 Ribbon(或 Spring Cloud LoadBalancer)压根没拿到服务实例列表。根源通常在服务发现环节已断开,而不是负载均衡器本身的问题。
- 先确认 Nacos 控制台里目标服务的“健康实例数”是否为 0;如果为 0,问题不在 Feign,在注册阶段
- 检查服务名大小写:Nacos 默认服务名全小写,
@FeignClient("UserService")会去查userservice,但如果你注册的是User-Service,就对不上 - Spring Cloud 2021+ 默认用
spring-cloud-starter-loadbalancer,若还保留spring-cloud-starter-netflix-ribbon,两个负载均衡器可能冲突,删掉 Ribbon 依赖
真正要盯住的是 /actuator/health 和 /actuator/service-registry 这两个 endpoint 的返回,它们比 Feign 报错早两步暴露问题。










