![字母哥博客](https://cdn.zimug.com/wx-zimug.png)
笔者已经写过不少的实战类的文章,经常会有人问我:“代码是从你那里copy的,步骤也是按照你的方法做的,为什么报错?”。如果再加上质问的语气词,就真的让人非常讨厌!同样是九年义务教育,人教版课本,为什么有人上了985,而有的人却在搬砖?
扯远了,回归正题。实际上一个程序是否能够正确的运行,影响因素是方方面面的,最常规的因素就是代码是否写的正确。但除此之外,还有你的运行环境、版本兼容度、甚至编写代码的程序员的心态等等,都是影响程序能否正确运行的因素,而且非常重要。这一点在Spring Cloud微服务工程中体现的尤为明显。
如果你使用了Spring Cloud 及 Spring Cloud Alibaba、Spring Boot,你该如何确定具体该使用哪一个版本?**本文就带你从官网提炼一下:该如何确定版本号保证兼容性?重点体现一下这个思考过程,和官网中留下的版本选型依据信息**
笔者的版本号选型之路,遵循一个原则:**遵循官方建议的基础上、尽量使用最新GA版(GA是指General Availability,正式发布版本)!** Why?大牛以前都告诉我们,选型不要用最新版的。新版的bug多,我现在还用java8呢。通常来说是这样的,新版本功能性更强,老版本的稳定性更佳。
但Spring Cloud情况有点特殊,它是一个实实在在的“版本帝”,而且其组件的更新换代速度让人瞠目结舌,社区的发展速度和活跃度都非常高,这就带来一个问题,发展越快坑就越多,上一个版本的坑还没填完,新版本新功能新特性就出来了。**所以很难去说:老版本维护时间长bug少,新版本的bug多。因此我们倒不如就尽量使用新版本,获得更多的功能性提升。**
> 以下截图取自2020年3月15日,本文为作者原创,禁止转载!日子特殊哈!
## 一、Spring Boot 版本
下面的截图,截取自Spring Boot的github仓库的wiki:[https://github.com/spring-projects/spring-boot/wiki](https://github.com/spring-projects/spring-boot/wiki),github中最新的版本是2.3,但wiki中明确说到2.2版本是目前正在支持维护的版本。
![](https://img.kancloud.cn/f0/a0/f0a03001850f73a2263201592eea51ce_944x150.png)
这与Spring Boot官方网站中的说明是一致的,下图截取自Spring Boot官方网站。
![](https://img.kancloud.cn/85/53/8553a90573dd31598d6759491d8cbc31_1075x495.png)
## 二、Spring Cloud版本
Spring Cloud版本的版本号命名比较特殊,它是使用伦敦地铁站的站名作为版本号的。从A、B、C、D、E,目前是Hoxton SR3版本(我们简称H版),SR是service releases的缩写。
![](https://img.kancloud.cn/e8/9b/e89b58a5919f4321885c3c5e944c11d4_1076x648.png)
## 三、兼容性基础约束
在Spring Cloud官网的OverView预览中[https://spring.io/projects/spring-cloud/#overview](https://spring.io/projects/spring-cloud/#overview),明确有如下信息:
![](https://img.kancloud.cn/02/00/02007a1cf5325dc6ceac4e4078524932_1022x366.png)
也就是说:如果你使用Spring Cloud Hoxton,Spring Boot版本就要使用2.2.x。如果你是老项目,使用的是Spring Cloud Greenwich,Spring Boot版本就要使用2.1.x。
我们可以通过访问“/actuator/info”JSON服务端点,[https://start.spring.io/actuator/info](https://start.spring.io/actuator/info)
![](https://img.kancloud.cn/f7/d3/f7d37101c2064b2be216d87ed56d043a_904x242.png)
从以上的JSON响应信息中心,我们明确的看到:如果你是用Spring Cloud Hoxton,需要使用Spring Boot 2.2.0以上,2.2.6以下。如果你同时使用到了Spring cloud alibaba,Spring Boot 2.2.0以上,2.3.0以下。
## 四、Spring Cloud Reference
最后我们来看一下Spring Cloud Reference文档内部:
[https://cloud.spring.io/spring-cloud-static/Hoxton.SR3/reference/html/spring-cloud.html](https://cloud.spring.io/spring-cloud-static/Hoxton.SR3/reference/html/spring-cloud.html)
开篇截图:
![](https://img.kancloud.cn/b0/ef/b0ef54bef0263b1e9d781213ecf0bf75_1198x408.png)
所以我们最终选型是
|库|版本|
|----|----|
|Spring Cloud|Hoxton SR3|
|Spring Boot|2.2.5.RELEASE|
## 五、Spring Cloud Alibaba
[spring-cloud-alibaba与spring-cloud和spring-boot之间的版本说明](https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E)
| Spring Cloud Version | Spring Cloud Alibaba Version | Spring Boot Version |
| --- | --- | --- |
| Spring Cloud Hoxton.SR3(选)| 2.2.1.RELEASE(选)| 2.2.5.RELEASE(选)|
| Spring Cloud Hoxton.RELEASE| 2.2.0.RELEASE| 2.2.X.RELEASE|
| Spring Cloud Greenwich | 2.1.1.RELEASE | 2.1.X.RELEASE|
| Spring Cloud Finchley | 2.0.1.RELEASE| 2.0.X.RELEASE|
| Spring Cloud Edgware | 1.5.1.RELEASE | 1.5.X.RELEASE |
- 文档内容简介(一定要看)
- 笔者的其他作品推荐
- vue深入浅出系列
- 手摸手教你学SpringBoot2.0
- Spring Security-JWT-OAuth2一本通
- 实战前后端分离RBAC权限管理系统
- 模块与代码分支说明
- dongbb-cloud项目核心架构
- 微服务架构进化论
- SpringBoot与Cloud选型兼容
- Spring Cloud组件的选型
- 单体应用拆分微服务
- 单体应用与微服务对比
- 微服务设计拆分原则
- 新建父工程及子模块框架
- 通用微服务初始化模块构建
- 持久层模块单独拆分
- 拆分rbac权限管理微服务
- Hello-microservice
- 构建eureka服务注册中心
- 向服务注册中心注册服务
- 第一个微服务调用
- 远程服务调用
- HttpClient远程服务调用
- RestTemplate远程服务调用
- RestTemplate多实例负载均衡
- Ribbon调用流程源码解析
- Ribbon负载均衡策略源码解析
- Ribbon重试机制与饥饿加载
- Ribbon自定义负载均衡策略
- Feign与OpenFeign
- Feign设计原理源码解析
- Feign请求压缩与超时等配置
- 服务注册与发现
- 白话服务注册与发现
- DiscoveryClient服务发现
- Eureka集群环境构建(linux)
- Eureka集群多网卡环境ip设置
- Eureka集群服务注册与安全认证
- Eureka自我保护与健康检查
- 主流服务注册中心对比(含nacos)
- zookeeper概念及功能简介
- zookeeper-linux集群安装
- zookeeper服务注册与发现
- consul概念及功能介绍
- consul-linux集群安装
- consul服务注册与发现
- 通用-auatator导致401问题
- 分布式配置中心-apollo
- 服务配置中心概念及使用场景
- apollo概念功能简介
- apollo架构详解
- apollo分布式部署之Portal
- apollo分布式部署之环境区分
- apollo项目权限管理实战
- apollo-java客户端基础
- apollo与SpringCloud服务集成
- apollo实例配置热更新
- apollo命名空间与集群
- apollo灰度发布(日志热更新为例)
- SpringCloudConfig配置中心
- config-git配置文件仓库
- config配置中心搭建与测试
- config客户端基础
- config配置安全认证
- config客户端配置刷新
- config配置中心高可用
- BUS消息总线
- bus消息总线简介
- docker安装rabbitMQ
- 基于rabbitMQ的消息总线
- bus实现批量配置刷新
- alibaba-nacos
- nacos介绍与单机部署
- nacos集群部署方式(linux)
- nacos服务注册与发现
- nacos服务注册中心详解
- nacos客户端配置加载
- nacos客户端配置刷新
- nacos服务配置隔离与共享
- nacos配置Beta发布
- 服务熔断降级hystrix
- 服务降级&熔断&限流
- Hystrix集成并实现服务熔断
- Jemter模拟触发服务熔断
- Hystrix服务降级fallback
- Hystrix结合Feign服务降级
- 远程服务调用异常传递的问题
- Hystrix-Feign异常拦截与处理
- Hystrix-DashBoard单服务监控
- Hystrix-dashboard集群监控
- 分布式系统流量卫兵sentinel
- sentinel简介与安装
- 客户端集成与实时监控
- 实战流控规则-QPS限流
- 实战流控规则-线程数限流
- 实战流控规则-关联限流
- 实战流控规则-链路限流
- 实战流控效果-WarmUp
- 实战流控效果-匀速排队
- BlockException处理
- 实战熔断降级-RT
- 实战熔断降级-异常数与比例
- DegradeException处理
- 注解与异常的归纳总结
- Feign降级及异常传递拦截
- 动态规则nacos集中存储
- 热点参数限流
- 系统自适应限流
- 微服务网关-GateWay
- 还有必要学习Zuul么?
- 简介与非阻塞异步IO模型
- GateWay概念与流程
- 新建一个GateWay项目
- 通用Predicate的使用
- 自定义PredicateFactory
- 编码方式构建静态路由
- Filter过滤器介绍与使用
- 自定义过滤器Filter
- 网关请求转发负载均衡
- 结合nacos实现动态路由配置
- 整合Sentinel实现资源限流
- 跨域访问配置
- 网关层面全局异常处理
- 微服务网关安全认证-JWT篇
- Gateway-JWT认证鉴权流程
- 登录认证JWT令牌颁发
- 全局过滤器实现JWT鉴权
- 微服务自身内部的权限管理
- 微服务安全认证-OAuth篇(撰写中)