
筆者已經寫過不少的實戰類的文章,經常會有人問我:“代碼是從你那里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版本是目前正在支持維護的版本。

這與Spring Boot官方網站中的說明是一致的,下圖截取自Spring Boot官方網站。

## 二、Spring Cloud版本
Spring Cloud版本的版本號命名比較特殊,它是使用倫敦地鐵站的站名作為版本號的。從A、B、C、D、E,目前是Hoxton SR3版本(我們簡稱H版),SR是service releases的縮寫。

## 三、兼容性基礎約束
在Spring Cloud官網的OverView預覽中[https://spring.io/projects/spring-cloud/#overview](https://spring.io/projects/spring-cloud/#overview),明確有如下信息:

也就是說:如果你使用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)

從以上的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)
開篇截圖:

所以我們最終選型是
|庫|版本|
|----|----|
|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篇(撰寫中)