一、前言
在搭建SpringCloud项目环境架构的时候,经常需要选择SpringBoot和SpringCloud进行兼容的版本号。因此,对于选择SpringBoot版本与SpringCloud版本的对应关系很重要,如果版本关系不对应,常见的会遇见项目启动不起来,怪异的则会是你的项目出现一些诡异的问题,查资料也不好查。下面就收集一下SpringBoot与SpringCloud版本之间的对应关系,在搭建项目框架或者学习时按照对应的版本区间进行选择即可,避免走一些不必要的弯路。
1. 历史版本图
Release train Spring Boot compatibility
注意: 官方通告SpringBoot1.5.x及以下版本官方不再提供维护了,建议开发者选择使用SpringBoot2.0.x以上的版本,相对应的SpringCloud版本也最好不要使用。
二、查看版本关系
访问Spring官方地址,可获取SpringBoot和SpringCloud版本对应信息。
地址如下:
https://start.spring.io/actuator/info
JSON格式如下:
{ "git": { "branch": "aa1ad68ea9a0eac4180037118854753f3e200e85", "commit": { "id": "aa1ad68", "time": "2023-03-10T15:26:12Z" } }, "build": { "version": "0.0.1-SNAPSHOT", "artifact": "start-site", "versions": { "spring-boot": "3.0.2", "initializr": "0.20.0-SNAPSHOT" }, "name": "start.spring.io website", "time": "2023-03-10T15:27:19.222Z", "group": "io.spring.start" }, "bom-ranges": { "codecentric-spring-boot-admin": { "2.4.3": "Spring Boot >=2.3.0.M1 and <2.5.0-M1", "2.5.6": "Spring Boot >=2.5.0.M1 and <2.6.0-M1", "2.6.8": "Spring Boot >=2.6.0.M1 and <2.7.0-M1", "2.7.4": "Spring Boot >=2.7.0.M1 and <3.0.0-M1", "3.0.0-M4": "Spring Boot >=3.0.0-M1 and <3.1.0-M1" }, "solace-spring-boot": { "1.1.0": "Spring Boot >=2.3.0.M1 and <2.6.0-M1", "1.2.2": "Spring Boot >=2.6.0.M1 and <3.0.0-M1" }, "solace-spring-cloud": { "1.1.1": "Spring Boot >=2.3.0.M1 and <2.4.0-M1", "2.1.0": "Spring Boot >=2.4.0.M1 and <2.6.0-M1", "2.3.2": "Spring Boot >=2.6.0.M1 and <3.0.0-M1" }, "spring-cloud": { "Hoxton.SR12": "Spring Boot >=2.2.0.RELEASE and <2.4.0.M1", "2020.0.6": "Spring Boot >=2.4.0.M1 and <2.6.0-M1", "2021.0.0-M1": "Spring Boot >=2.6.0-M1 and <2.6.0-M3", "2021.0.0-M3": "Spring Boot >=2.6.0-M3 and <2.6.0-RC1", "2021.0.0-RC1": "Spring Boot >=2.6.0-RC1 and <2.6.1", "2021.0.6": "Spring Boot >=2.6.1 and <3.0.0-M1", "2022.0.0-M1": "Spring Boot >=3.0.0-M1 and <3.0.0-M2", "2022.0.0-M2": "Spring Boot >=3.0.0-M2 and <3.0.0-M3", "2022.0.0-M3": "Spring Boot >=3.0.0-M3 and <3.0.0-M4", "2022.0.0-M4": "Spring Boot >=3.0.0-M4 and <3.0.0-M5", "2022.0.0-M5": "Spring Boot >=3.0.0-M5 and <3.0.0-RC1", "2022.0.0-RC1": "Spring Boot >=3.0.0-RC1 and <3.0.0-RC2", "2022.0.0-RC2": "Spring Boot >=3.0.0-RC2 and <3.0.0", "2022.0.1": "Spring Boot >=3.0.0 and <3.1.0-M1" }, "spring-cloud-azure": { "4.6.0": "Spring Boot >=2.5.0.M1 and <3.0.0-M1", "5.0.0": "Spring Boot >=3.0.0-M1 and <3.1.0-M1" }, "spring-cloud-gcp": { "2.0.11": "Spring Boot >=2.4.0-M1 and <2.6.0-M1", "3.4.6": "Spring Boot >=2.6.0-M1 and <3.0.0-M1", "4.1.2": "Spring Boot >=3.0.0-M1 and <3.1.0-M1" }, "spring-cloud-services": { "2.3.0.RELEASE": "Spring Boot >=2.3.0.RELEASE and <2.4.0-M1", "2.4.1": "Spring Boot >=2.4.0-M1 and <2.5.0-M1", "3.3.0": "Spring Boot >=2.5.0-M1 and <2.6.0-M1", "3.4.0": "Spring Boot >=2.6.0-M1 and <2.7.0-M1", "3.5.0": "Spring Boot >=2.7.0-M1 and <3.0.0-M1", "4.0.0": "Spring Boot >=3.0.0 and <3.1.0-M1" }, "spring-shell": { "2.1.6": "Spring Boot >=2.7.0 and <3.0.0-M1", "3.0.0": "Spring Boot >=3.0.0 and <3.1.0-M1" }, "vaadin": { "14.9.6": "Spring Boot >=2.1.0.RELEASE and <2.6.0-M1", "23.2.15": "Spring Boot >=2.6.0-M1 and <2.7.0-M1", "23.3.5": "Spring Boot >=2.7.0-M1 and <3.0.0-M1", "24.0.0": "Spring Boot >=3.0.0-M1 and <3.1.0-M1" }, "hilla": { "1.3.5": "Spring Boot >=2.7.0-M1 and <3.0.0-M1", "2.0.0": "Spring Boot >=3.0.0-M1 and <3.1.0-M1" }, "wavefront": { "2.0.2": "Spring Boot >=2.1.0.RELEASE and <2.4.0-M1", "2.1.1": "Spring Boot >=2.4.0-M1 and <2.5.0-M1", "2.2.2": "Spring Boot >=2.5.0-M1 and <2.7.0-M1", "2.3.4": "Spring Boot >=2.7.0-M1 and <3.0.0-M1", "3.0.1": "Spring Boot >=3.0.0-M1 and <3.1.0-M1" } }, "dependency-ranges": { "okta": { "1.4.0": "Spring Boot >=2.2.0.RELEASE and <2.4.0-M1", "1.5.1": "Spring Boot >=2.4.0-M1 and <2.4.1", "2.0.1": "Spring Boot >=2.4.1 and <2.5.0-M1", "2.1.6": "Spring Boot >=2.5.0-M1 and <3.0.0-M1", "3.0.3": "Spring Boot >=3.0.0-M1 and <3.1.0-M1", "managed": "Spring Boot >=3.1.0-M1" }, "mybatis": { "2.1.4": "Spring Boot >=2.1.0.RELEASE and <2.5.0-M1", "2.2.2": "Spring Boot >=2.5.0-M1 and <2.7.0-M1", "2.3.0": "Spring Boot >=2.7.0-M1 and <3.0.0-M1", "3.0.0": "Spring Boot >=3.0.0-M1" }, "camel": { "3.5.0": "Spring Boot >=2.3.0.M1 and <2.4.0-M1", "3.10.0": "Spring Boot >=2.4.0.M1 and <2.5.0-M1", "3.13.0": "Spring Boot >=2.5.0.M1 and <2.6.0-M1", "3.17.0": "Spring Boot >=2.6.0.M1 and <2.7.0-M1", "3.20.2": "Spring Boot >=2.7.0.M1 and <3.0.0-M1", "4.0.0-M2": "Spring Boot >=3.0.0-M1 and <3.1.0-M1" }, "picocli": { "4.7.0": "Spring Boot >=2.5.0.RELEASE and <3.1.0-M1" }, "open-service-broker": { "3.2.0": "Spring Boot >=2.3.0.M1 and <2.4.0-M1", "3.3.1": "Spring Boot >=2.4.0-M1 and <2.5.0-M1", "3.4.1": "Spring Boot >=2.5.0-M1 and <2.6.0-M1", "3.5.0": "Spring Boot >=2.6.0-M1 and <2.7.0-M1" } } }
三、如何选择SpringBoot与SpringCloud版本号
项目搭建初期,如何对SpringBoot和SpringCloud的一个相互兼容性版本号进行选择,这是很重要的一步,例如SpringCloud的Hoxton.SR3这个版本,他对应的"Spring Boot >=2.2.0.M4 and <2.3.0.BUILD-SNAPSHOT"版本,意思就是如果选择使用SpringCloud 的Hoxton.SR3这个版本,那么SpringBoot的版本需要大于等于2.2.0小于2.3.0即可满足兼容性。
1. 引入SpringCloud版本管理
官方提供了管理Spring Cloud 每个版本兼容的pom,引入下面依赖管理信息即可:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Hoxton.SR3</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2. 使用Spring Boot
Spring Boot可以也像父工程那样管理自己内部的兼容版本号,如下:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
四、SpringBoot、SpringCloud、SpringCloudAlibaba版本对应关系
由于Spring Cloud基于Spring Boot构建,而Spring Cloud Alibaba又基于Spring Cloud Common的规范实现,所以当我们使用``Spring Cloud Alibaba`来构建微服务应用的时候,需要知道这三者之间的版本关系。
下表整理了目前Spring Cloud Alibaba的版本与Spring Boot、Spring Cloud版本的兼容关系:
1. 毕业版本依赖关系(推荐使用)
五. Spring Cloud Alibaba与组件版本关系
Spring Cloud Alibaba是基于Spring Cloud Common的规范实现,而Spring Cloud Alibaba的各个微服务组件依赖于Spring Cloud Alibaba自身,因此我们需要知道Spring Cloud Alibaba与其自身微服务组件之间的版本关系。
下表整理了目前Spring Cloud Alibaba的版本与Sentinel、Nacos 、RocketMQ 、Dubbo、Seata版本的兼容关系:
1. 组件版本关系
六、依赖管理
Spring Cloud Alibaba BOM 包含了它所使用的所有依赖的版本。
1. RELEASE 版本
Spring Cloud Hoxton
如果需要使用 Spring Cloud Hoxton 版本,请在 dependencyManagement中添加如下配置
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.2.3.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
然后在dependencies 中添加自己所需使用的依赖即可使用。
Spring Cloud Greenwich
如果需要使用 Spring Cloud Greenwich版本,请在 dependencyManagement中添加如下配置
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.3.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
然后在 dependencies中添加自己所需使用的依赖即可使用。
Spring Cloud Finchley
如果需要使用 Spring Cloud Finchley版本,请在 dependencyManagement中添加如下配置
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.0.3.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
然后在dependencies中添加自己所需使用的依赖即可使用。
Spring Cloud Edgware
如果需要使用 Spring Cloud Edgware 版本,请在 dependencyManagement中添加如下配置
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>1.5.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency>
然后在 dependencies中添加自己所需使用的依赖即可使用。
2. 版本管理规范
项目的版本号格式为 x.x.x 的形式,其中 x 的数值类型为数字,从 0 开始取值,且不限于 0~9 这个范围。项目处于孵化器阶段时,第一位版本号固定使用 0,即版本号为 0.x.x 的格式。
由于 `Spring Boot 1 和 Spring Boot 2 在 Actuator 模块的接口和注解有很大的变更,且 spring-cloud-commons 从 1.x.x 版本升级到 2.0.0 版本也有较大的变更,因此我们采取跟 SpringBoot 版本号一致的版本:
1.5.x 版本适用于 Spring Boot 1.5.x
2.0.x 版本适用于 Spring Boot 2.0.x
2.1.x 版本适用于 Spring Boot 2.1.x
2.2.x 版本适用于 Spring Boot 2.2.x
七、参考文档
1.Spring-Cloud-Alibaba版本说明:
https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
3.SpringCloudAlibaba中文社区地址:
https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
2.SpringCloud官方文档:
https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/html/