Spring Cloud 与 Spring Boot 版本必须严格对齐,否则启动失败;需按官方兼容表选用 GA 版本,避免混用生态、检查传递依赖,并正确配置构建工具的依赖管理。

Spring Cloud 版本和 Spring Boot 版本必须对齐
不匹配直接导致启动失败,常见报错是 NoClassDefFoundError 或 BeanCreationException,根源往往是 spring-cloud-context 和 spring-boot-autoconfigure 内部类签名不兼容。
官方只维护特定组合,比如:
– Spring Boot 3.2.x → 只支持 Spring Cloud 2023.0.x(代号 korora)
– Spring Boot 2.7.x → 对应 Spring Cloud 2021.0.x( Jubilee),不能再用 2022.0.x
- 查版本对应表,优先看 Spring Cloud 官网 Learn 页面 的「Release Train Version Compatibility」表格,不是 GitHub README
- 不要用
spring-cloud-dependencies的RELEASE或LATEST,Maven 会解析成过时快照版,改用具体 GA 版本如2023.0.3 - 如果用 Spring Boot 3.x,必须确认所有 Spring Cloud Starter(如
spring-cloud-starter-gateway)已发布 3.x 兼容版——旧版spring-cloud-starter-netflix-eureka-client在 Boot 3 下根本无法编译
starter 依赖不能混用 Netflix 和 Alibaba 生态
比如同时引入 spring-cloud-starter-netflix-ribbon 和 spring-cloud-starter-alibaba-nacos-discovery,Ribbon 默认负载均衡器会和 Nacos 的 LoadBalancerClient 冲突,启动时报 IllegalStateException: Unable to find ServerList。
- Spring Cloud 2020.0+ 已移除 Ribbon,默认走 Spring Cloud LoadBalancer;若项目还依赖
spring-cloud-starter-netflix-ribbon,得手动排除ribbon-core并加spring-cloud-starter-loadbalancer - Nacos 2.x 配合 Spring Cloud 2023.0 使用时,必须用
spring-cloud-starter-alibaba-nacos-discovery2023.1+ 版本,低版本会因 HTTP Client 不兼容抛Connection refused - OpenFeign 默认不启用 Spring Cloud LoadBalancer,需显式加
@LoadBalanced的RestTemplateBean,否则服务发现无效
本地开发环境绕过注册中心直连调试
微服务一启动就往 Nacos/Eureka 注册,但你只想跑通一个模块逻辑,又不想拉起整套中间件——硬关 spring.cloud.discovery.enabled=false 会导致 Feign Client 初始化失败,因为默认构造器依赖 DiscoveryClient。
- 在
application-local.yml中设:spring.cloud.discovery.enabled: falsespring.cloud.loadbalancer.enabled: false
再给 Feign 加@FeignClient(url = "http://localhost:8081")直连地址 - 如果用 RestTemplate,别写
@LoadBalanced RestTemplate,改用普通RestTemplate实例,避免触发 LoadBalancerAutoConfiguration - 注意:
spring.application.name仍要保留,否则部分 starter(如 Sleuth)会空指针
Gradle 多模块下 dependencyManagement 容易失效
父项目用 spring-boot-dependency-management 插件统一管理版本,但子模块声明 implementation 'org.springframework.cloud:spring-cloud-starter-openfeign' 时,实际下载的仍是老版 spring-cloud-openfeign-core,因为没走 BOM 导入路径。
立即学习“Java免费学习笔记(深入)”;
- Gradle 必须用
platform("org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}")声明平台依赖,而不是靠ext['spring-cloud.version'] = '2023.0.3'变量替换 - 子模块中所有 Spring Cloud 相关依赖,必须用
platform+enforcedPlatform双保险,否则 IDE 和命令行构建行为可能不一致 - Maven 用户相对省心,但要注意
spring-cloud-dependenciesBOM 的importscope 必须放在dependencyManagement最顶层,不能嵌套在 profile 里
版本对齐这事看着是配置问题,实际卡点常在传递依赖的隐式覆盖上——比如某个第三方 starter 自带了 spring-cloud-commons 1.2.x,就会把整个 BOM 拉偏。建议每次 mvn dependency:tree -Dincludes=org.springframework.cloud 扫一遍真实加载的版本。










