Spring Cloud 升級最新 Greenwich 版本,舒服了~


去年將 Spring Cloud 升級到了 Finchley 版本:
Spring Cloud 升級最新 Finchley 版本,踩了所有的坑!

這個大版本棧長是踩了非常多的坑啊,幫助了不少小伙伴。

Spring Cloud Greenwich 在 01/23/2019 這天正式發布了:
Spring Cloud Greenwich 正式發布,Hystrix 即將壽終正寢!

Greenwich發布也快 1 年了,棧長遲遲沒有升級,距離上個大版本升級一年多了,所以棧長最近將 Spring Cloud 升級到了 Greenwich,幾乎沒踩多少坑,但也有坑,這里再記錄分享一下,希望對你有用。

依賴升級

升級前 => 升級后

Spring Cloud Finchley.RELEASE => Spring Cloud Greenwich.SR3

Spring Boot 2.0.2.RELEASE => Spring Boot 2.1.7.RELEASE

為什么不直接升級到 Spring Boot 2.2.x?

Spring Cloud 和 Spring Boot 兼容性請見正文表格:

Spring Cloud Train Spring Boot Version
Hoxton 2.2.x
Greenwich 2.1.x
Finchley 2.0.x
Edgware 1.5.x
Dalston 1.5.x

如果用超出版本的,兼容性會有問題。

分不清這些版本的區別和意義?可以參考棧長之前寫的關於版本的文章:
Spring Cloud 多版本怎么選擇?

有興趣的可以關注棧長的微信公眾號:Java技術棧,Spring Boot、Spring Cloud 干貨教程及時推送。

Feign踩坑

升級后,應用啟動正常,但調用 Feign 服務的時候報了個這個異常:

The bean 'SERVICE-XXX.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.

同時日志中也給出了解決文案:

Action:

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

沒錯,就是在配置文件中配置上這個參數:

spring.main.allow-bean-definition-overriding=true

原因就是使用 @FeignClient 的時候定義了多個相同 name 的接口。

@FeignClient(name = "xxx", configuration = XXXConfig.class, fallbackFactory =
        XXXServiceFallback.class)
public interface XXXService extends IXXXService {

}

那為什么升級之后是好好的呢?

那是因為在 Spring Boot 2.1.0 之后把默認值改成了false。

而在 Spring Boot 2.1.0 之前這個值都是 true,也沒有這個參數可以修改這個配置。

那這個參數到底有什么用?

正常情況下,Spring容器里面只可能有一個唯一名字的 Bean 的,如果名字相同的情況下,就要看這個參數決定了,即是否允許 Bean 覆蓋,不允許情況下會拋出異常,如果允許,則誰覆蓋誰要看 Spring 容器 Bean 的初始化的順序了。

所以,配置這個參數為 true 后,多個 @FeignClient 注解相同名字的 Bean 的 configuration 參數就會被覆蓋了。

如果項目中有多個 configuration,那會受影響,我們沒有多個這樣的配置,所以暫且先配置這個參數解決問題。解決之后,就能正常使用 Feign 了,正常訪問微服務。

這難道是 Feign 的坑嗎?不可能把所有東西都寫在一個接口服務里面啊!暫時也沒找到好的辦法,后續再研究下吧。

未完,棧長將陸續分享 Spring Cloud 最新技術教程,現在已經寫了一堆存貨了,關注微信公眾號 "Java技術棧" ,公眾號第一時間推送!

@ All 碼農們:你們升級了嗎?有遇到什么樣的坑?歡迎留言!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM