Spring Cloud 2020.0.0正式發(fā)布再見(jiàn)了Netflix
✍前言
你好,我是YourBatman。
北京時(shí)間2020-12-22深夜,Spring Cloud 2020.0.0
版本正式發(fā)布。2020.0.0是第一個(gè)使用新版本方案的Spring Cloud發(fā)行版本。
關(guān)于版本號(hào)這里啰嗦幾句:在這之前,Spring Cloud的Release Train名稱采用的是倫敦地鐵站命名方式,如:Hoxton、Greenwich等。
說(shuō)明:2020.0.0版本又名Ilford
(地鐵站名),因?yàn)榇隧?xiàng)目3月后才按照新規(guī)更名,估計(jì)是為了團(tuán)隊(duì)內(nèi)溝通方便吧,你也可以理解為它僅是一個(gè)內(nèi)部代號(hào)而已,方便溝通
雖按照字母表順序排列,但仍存在兩個(gè)致命問(wèn)題:
對(duì)非英語(yǔ)母語(yǔ)國(guó)家(比如天朝)非常不友好,無(wú)法快速理清版本號(hào)關(guān)系A(chǔ)-Z,倘若版本號(hào)到Z了呢?如何繼續(xù)發(fā)展?你品,你細(xì)品
Spring團(tuán)隊(duì)意識(shí)到了這的確是個(gè)問(wèn)題,因此在今年3月份作出了改變。詳情參考我前面寫(xiě)的一篇文章(強(qiáng)烈建議每個(gè)進(jìn)來(lái)的你都了解下這次規(guī)則變更):Spring改變版本號(hào)命名規(guī)則:此舉對(duì)非英語(yǔ)國(guó)家很友好
說(shuō)明:版本號(hào)規(guī)則變更適用于所有Spring技術(shù)棧,包含Spring Framework、Spring Boot、Spring Cloud、Spring Data...
文歸正傳。Spring Cloud早在年初就啟動(dòng)了該版本的研發(fā)工作,并在今年4月份就已經(jīng)發(fā)布了其2020.0.0-M1版本(第一個(gè)里程碑版本),直到離2020年結(jié)束不到10天了才“憋出”大招,正式RELEASE。
Spring Cloud作為構(gòu)建在Spring Boot之上的云計(jì)算框架,我覺(jué)得本次難產(chǎn)的原因主要有二:
Spring Boot 2.4.0版本2020-11-12才正式RELEASE(Spirng Framework 5.3.0版本2020-10-27才RELEASE)
Spring Framework 5.3.0正式發(fā)布,在云原生路上繼續(xù)發(fā)力
Spring Boot 2.4.0正式發(fā)布,全新的配置文件加載機(jī)制(不向下兼容)
改動(dòng)確實(shí)太大,研發(fā)、測(cè)試、文檔編寫(xiě)工作量都是巨大的
從Spring Framework、Spring Boot、Spring Cloud三者的發(fā)版線路圖再一次驗(yàn)證了我的那句話:你對(duì)Spring Cloud多了解源自于你對(duì)Spring Boot有多了解,你對(duì)Spring Boot多了解源自于你對(duì)Spring Framework有多了解。這就是為何我文章花大量筆墨在Spring Framework上而非Spring Boot上的根本原因,底層通透了,上層運(yùn)用自如。
版本約定
- Spring Framework:5.3.2
- Spring Boot:2.4.1
- Spring Cloud:2020.0.0
以上版本為SC“攜帶”的版本
✍正文
有個(gè)有趣的現(xiàn)象,截止稿前(2020-12-23 22:00:00)官網(wǎng)還并未同步標(biāo)注好當(dāng)前最新版本為2020.0.0版(如圖):
其實(shí)早在24h之前官方博客就做出了發(fā)版宣告:
并且Maven中央倉(cāng)庫(kù)也已存在最新Jar包(證明你正常引包、使用是沒(méi)問(wèn)題的了):
其實(shí),文檔層面不止官網(wǎng)這一處沒(méi)有sync最新版本,我就不一一例舉,畢竟不太重要。針對(duì)此現(xiàn)象我yy一下,是不是Spring Cloud團(tuán)隊(duì)缺人人手不夠用呢?請(qǐng)問(wèn)社招嗎?O(∩_∩)O哈哈~
Spring Cloud版本管理
版本管理對(duì)于軟件開(kāi)發(fā)來(lái)說(shuō)太重要,在Spring Boot出現(xiàn)之前依賴關(guān)系、版本管理讓人著實(shí)頭大(即使有Spring BOM存在),特別是當(dāng)出現(xiàn)版本不適配時(shí)很容易就偷走你一下午甚至一整天的時(shí)間。
Spring Cloud作為上層應(yīng)用框架,底層版本匹配了才能正常work,其中最主要就是和Spring Boot的版本號(hào)要對(duì)齊。
與Spring Boot版本對(duì)應(yīng)關(guān)系
Spring Boot的出現(xiàn)和流行大大緩解了上述些情況,但使用起Spring Cloud時(shí)它和Spring Boot的版本對(duì)應(yīng)關(guān)系依舊是需要特別關(guān)注的。為此我?guī)湍憧偨Y(jié)出了這個(gè)表格:
Release Train | 發(fā)布時(shí)間 | Spring Boot版本 | SC Commons版本 |
---|---|---|---|
2020.0.x | 2020-12 | 2.4.x | 3.0.0 |
Hoxton | 2019-07 | 2.2.x, 2.3.x (從SR5起) | 2.2.x |
Greenwich | 2018-11 | 2.1.x | 2.1.x |
Finchley | 2017-10 | 2.0.x | 2.0.x |
Edgware | 2017-08 | 1.5.x | 1.3.x |
Dalston | 2017-05 | 1.5.x | 1.2.x |
Brixton | 2016-09 | 1.3.x | 1.1.x |
Angel | 2016-05 | 1.2.x | 1.0.x |
說(shuō)明:對(duì)于Spring Cloud內(nèi)部組件、Spring Boot、Spirng Framework、Security等這個(gè)龐大體系的版本對(duì)照關(guān)系,文章已整理好,下篇發(fā)出,請(qǐng)記得搜藏哦
特別提醒:spring-cloud-starter-loadbalancer
是伴隨著Spring Cloud Commons 2.2.0版本才開(kāi)始商用的(Hoxton版本),這個(gè)版本節(jié)點(diǎn)請(qǐng)稍微關(guān)注下,因?yàn)樗娲薘ibbon。
當(dāng)前支持的版本
Spring Cloud遵循Pivotal OSS support policy 協(xié)議對(duì)主要版本提供3年的支持。此外,在Spring Cloud的主要或次要版本發(fā)布后,若存在嚴(yán)重的bug和安全問(wèn)題,就會(huì)再維護(hù)一段時(shí)間(6-12個(gè)月不等)。
特別注意:這里指的主要版本才是3年,主要版本可不常有的哦
現(xiàn)在2020.0.0版本已發(fā)布,又到了淘汰的時(shí)候。現(xiàn)在Spring Cloud官方還會(huì)支持的版本有:
2020.0版本:(支持Spring Boot 2.4.x)它是主要版本,按計(jì)劃會(huì)支持到2023年12月份
它是自Finchley后的又一主要版本
Hoxton版本:(支持Spring Boot 2.2.x和2.3.x)作為Finchley發(fā)行系列的一個(gè)次要版本,它的常規(guī)維護(hù)將持續(xù)到2021年6月底。從2020-07開(kāi)始進(jìn)入到特殊維護(hù)期(不加新功能,只改緊急bug),2021-12月底就只會(huì)發(fā)布重大錯(cuò)誤/安全補(bǔ)丁了
Greenwich版本:(支持Spring Boot 2.1.x)2020-01就停止維護(hù)了,2020-12-31號(hào)也將終結(jié)它的特殊維護(hù)期
Finchley版本:(支持Spring Boot 2.0.x)它是一個(gè)主要版本的開(kāi)始,2018年發(fā)布
更老版本:嗯,忘了吧
Spring官方建議:盡量使用最新版本。不過(guò)建議歸建議,作為只使用晚期大眾技術(shù)的我們,坐在第二排甚至第三排看戲才有安全感。但歷史的巨浪總歸會(huì)把前排淘汰,因此早點(diǎn)做足準(zhǔn)備總是好的,不至于時(shí)至被推至前排時(shí)只能裸泳。
Spring Cloud 2020.0作為一個(gè)主要版本,帶來(lái)了眾多顯著的變化,其中進(jìn)行了一些阻斷式更新(不向下兼容)是本文最大看點(diǎn),來(lái)吧上菜。
阻斷式升級(jí)(不向下兼容)
差不多在去年(2019年)的這個(gè)時(shí)候,Spring Cloud在其Roadmap(之前文章有介紹過(guò))里就宣布將要終結(jié)的一些庫(kù)/版本,其中最重要的就是指Spring Cloud Netflix項(xiàng)目進(jìn)入維護(hù)模式,然后計(jì)劃在2020年完全移除。
Spring Cloud做出這樣的決定其實(shí)也是“被迫的”。我們知道Spring Cloud一直以來(lái)把Netflix OSS
套件作為其官方默認(rèn)的一站式解決方案,那時(shí)的Netflix OSS套件恨不得可以跟Spring Cloud劃等號(hào)。奈何呀,Netflix公司在2018年前后宣布其核心組件Hystrix、Ribbon、Zuul、Archaius等均進(jìn)入維護(hù)狀態(tài)。
雖然有Zuul 2.x,Archaius 2.x,但它們均不能向下兼容,無(wú)法平滑升級(jí),因此幾乎等于無(wú)法使用
從2018年至今處于維護(hù)狀態(tài)的模塊有(包括其對(duì)應(yīng)的starter,此處并未列出):
- spring-cloud-netflix-archaius
- spring-cloud-netflix-hystrix-contract
- spring-cloud-netflix-hystrix-dashboard
- spring-cloud-netflix-hystrix-stream
- spring-cloud-netflix-hystrix
- spring-cloud-netflix-ribbon
- spring-cloud-netflix-turbine-stream
- spring-cloud-netflix-turbine
- spring-cloud-netflix-zuul
1、再見(jiàn)了,Netflix
時(shí)至今日,Spring Cloud 2020.0正式發(fā)布,在這個(gè)主要版本里,按既定計(jì)劃終于對(duì)spring-cloud-netflix
動(dòng)刀了。我?guī)湍惝?huà)了幅spring-cloud-netflix-dependencies
的xml文件前后版本主要差異的對(duì)比圖,一目了然:
spring-cloud-netflix-dependencies
沒(méi)有消失哦,它依舊存在,版本號(hào)跟隨大部隊(duì)升級(jí)為3.0.x版本- 舊版本的
spring-cloud-netflix-dependencies
管理著Netflix所有組件,包括Hystrix、Ribbon、Zuul、Eureka等。而自2020.0版本起,它有且只管理Eureka(包括Server和Client)
解釋說(shuō)明:Feign雖然最初屬Netflix公司,但從9.x版本開(kāi)始就移交給OpenFeign組織管理了,因此不再劃入Netflix管轄范疇
簡(jiǎn)單一句話概括:Spring Cloud 2020.0.0版本徹底刪除掉了Netflix除Eureka外的所有組件。至此,我們懷著感恩的心可以對(duì)Netflix OSS套件道一聲謝謝,并可以對(duì)它說(shuō)再見(jiàn)了。
說(shuō)明:Netflix的Eureka項(xiàng)目仍舊是活躍狀態(tài),這個(gè)注冊(cè)中心設(shè)計(jì)上還是蠻優(yōu)秀的,綜合表現(xiàn)尚可,市場(chǎng)上競(jìng)爭(zhēng)力依舊可圈可點(diǎn),因此Spring Cloud暫還未放棄它
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
Netflix組件替代方案
Spring Cloud既然把Netflix OSS套件大刀闊斧的砍掉了,那總歸得有替代方案吧。那是必然的,Spring Cloud團(tuán)隊(duì)給我們推薦了用于替代的產(chǎn)品:
Netflix | 推薦替代品 | 說(shuō)明 |
---|---|---|
Hystrix | Resilience4j | Hystrix自己也推薦你使用它代替自己 |
Hystrix Dashboard / Turbine | Micrometer + Monitoring System | 說(shuō)白了,監(jiān)控這件事交給更專業(yè)的組件去做 |
Ribbon | Spring Cloud Loadbalancer | 忍不住了,Spring終究親自出手 |
Zuul 1 | Spring Cloud Gateway | 忍不住了,Spring終究親自出手 |
Archaius 1 | Spring Boot外部化配置 + Spring Cloud配置 | 比Netflix實(shí)現(xiàn)的更好、更強(qiáng)大 |
Spring Cloud LoadBalancer是什么?
以上替代品中,你可能最陌生、最好奇的是Spring Cloud Loadbalancer
,它一度只是Spring Cloud 孵化器里的一個(gè)小項(xiàng)目,并且一度擱淺。后再經(jīng)過(guò)重啟,發(fā)展,現(xiàn)行使其偉大使命,正式用于完全替換 Ribbon,成為Spring Cloud負(fù)載均衡器唯一實(shí)現(xiàn)。
值得注意的是:Spring Cloud LoadBalancer首次引入是在Spring Cloud Commons 2.2.0時(shí),也就是Hoxton發(fā)布時(shí)就引入了,只不過(guò)那會(huì)還只是備胎/備選,默認(rèn)依舊是Ribbon挑大梁。下截圖是在Hoxton版本的情況:
如圖,負(fù)載均衡抽象LoadBalancerClient
接口有兩個(gè)實(shí)現(xiàn),而到了Spring Cloud 2020.0版本后,BlockingLoadBalancerClient
就是唯一實(shí)現(xiàn)了。
關(guān)于spring-cloud-loadbalancer負(fù)載均衡器的使用,官方有個(gè)極其建議教程:https://spring.io/guides/gs/spring-cloud-loadbalancer。有興趣可自己玩玩,若沒(méi)興趣,那就關(guān)注我后面文章分析吧,我會(huì)專程介紹它的
Spring Cloud Alibaba是否可作為替代方案?
嗯,也可以。
不過(guò)它目前來(lái)說(shuō)并不是Spring Cloud官方的推薦的默認(rèn)方案。期待國(guó)人一起努力,能早日送Spring Cloud Alibaba上去,讓歪果仁用上咱天朝的框架,提issue必須用中文O(∩_∩)O哈哈~。
顯示導(dǎo)入Netflix包還能否正常work?
既想升級(jí)到最新版本的Spring Cloud,又想保持向下兼容使用Netflix的技術(shù)。雖說(shuō)spring-cloud-netflix-dependencies里不再包含netflix的核心組件,那我手動(dòng)導(dǎo)包并指定版本號(hào)行不行?能否正常work呢?
答:我拍腦袋就給你個(gè)答案,不行。既然我沒(méi)論證過(guò),但這么使用太畸形了,此方案應(yīng)被槍斃在萌芽中,不應(yīng)該有。
另外,從此事也告訴我們:使用Spring Cloud時(shí)盡量面向它的抽象編程,這樣即使Spirng Cloud換底層組件(如換熔斷器、負(fù)載均衡器)等等,理論上對(duì)我們業(yè)務(wù)是無(wú)影響或者影響很小的,這都得益于它的Spring Cloud Commons抽象,那里是精華。
2、Bootstrap上下文默認(rèn)不再啟動(dòng)
知曉原理的同學(xué)知道,Spring Cloud容器是靠Bootstrap Context
引導(dǎo)上下文來(lái)啟動(dòng)的,對(duì)應(yīng)的類是BootstrapApplicationListener
。
這在2020.0版本發(fā)生了改變,新版本的Spring Cloud不再依賴于此上下文而啟動(dòng)。因此默認(rèn)情況下,將不再啟動(dòng)Bootstrap上下文。代碼層面的改變發(fā)生在這里:
BootstrapApplicationListener: @Override public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) { ConfigurableEnvironment environment = event.getEnvironment(); // 在方法開(kāi)頭加了這麼個(gè)判斷 if (!bootstrapEnabled(environment) && !useLegacyProcessing(environment)) { return; } ... } PropertyUtils: // BOOTSTRAP_ENABLED_PROPERTY = spring.cloud.bootstrap.enabled public static boolean bootstrapEnabled(Environment environment) { return environment.getProperty(BOOTSTRAP_ENABLED_PROPERTY, Boolean.class, false) || MARKER_CLASS_EXISTS; } // USE_LEGACY_PROCESSING_PROPERTY = spring.config.use-legacy-processing public static boolean useLegacyProcessing(Environment environment) { return environment.getProperty(USE_LEGACY_PROCESSING_PROPERTY, Boolean.class, false); }
開(kāi)啟方式
若你需要開(kāi)啟Bootstrap上下文,有兩種辦法可以實(shí)現(xiàn):
- 設(shè)置值
spring.cloud.bootstrap.enabled=true
或者spring.config.use-legacy-processing=true
即可。注意:這些個(gè)屬性值必須確保其能放進(jìn)環(huán)境里才能生效。比如靠譜的方式是:系統(tǒng)屬性、環(huán)境變量、命令行等 - 引入一個(gè)Jar:
org.springframework.cloud:spring-cloud-starter-bootstrap
,然后什么都不用做了說(shuō)明:這個(gè)jar里面有且僅有一個(gè)Marker
類,作用你懂的,此處不做過(guò)多解釋
說(shuō)明:手動(dòng)開(kāi)啟Bootstrap上下文,證明你fallback到老的方式去加載SC,那么一切請(qǐng)按照老方式做即可
3、全新的配置方式
得益于Spring Boot 2.4.x支持全新的配置文件書(shū)寫(xiě)方式,自此可以使用spring.config.import
倆導(dǎo)入其它組建的配置。如:
spring.config.import=configserver:xxx
spring.config.import=zookeeper:...
這么做更具模塊化,更符合云原生環(huán)境的要求。
4、其它
- 之前若要禁用Spring Cloud Config Client端的健康指示用的是
health.config.enabled=false
,現(xiàn)改為management.health.config.enabled=false
。保持了和Spring Boot控制端點(diǎn)風(fēng)格一致 - 帶有無(wú)效字符(破折號(hào))的端點(diǎn)id已經(jīng)改為符合標(biāo)準(zhǔn)的了,自此啟動(dòng)時(shí)再也沒(méi)有討厭的警告了,拯救潔癖者。
bus-env -> busenv
bus-refresh -> busrefresh
service-registry -> serviceregistry
// old @Endpoint(id = "service-registry") public class ServiceRegistryEndpoint { ... } // new @Endpoint(id = "serviceregistry") public class ServiceRegistryEndpoint { ... }
常規(guī)式升級(jí)
常規(guī)升級(jí)這塊關(guān)注點(diǎn)就沒(méi)那么多了,主要對(duì)其組件如Spring Cloud Commons、Spring Cloud Kubernetes、Spring Cloud Openfeign...
等做些常規(guī)升級(jí),乏善可陳。
值得關(guān)注的一點(diǎn):Spirng Cloud所有的Module版本號(hào)均升級(jí)到了3.0.0
(大版本號(hào)的升級(jí)),除Spring Cloud Circuitbreaker/Spring Cloud Kubernetes(2.0.0)和Spring Cloud Task(2.3.0)之外。
仍舊存在的問(wèn)題
雖然2020.0已經(jīng)RELEASE了,但是仍存在著未解決的問(wèn)題,例舉幾個(gè)此版本現(xiàn)存的問(wèn)題:
- 若使用
spring.config.import=configserver:
來(lái)配置配置中心,此版本漏掉了支持retry參數(shù)解決方案:若你要使用的話,你只得fallback到傳統(tǒng)方式嘍(寫(xiě)在bootstrap.yaml里) spring-cloud-config-dependencies
里出現(xiàn)了一個(gè)非release版本的jar(具體看下截圖)解決方案:手動(dòng)指定該jar的版本號(hào)
說(shuō)明:M1屬于里程碑版本,還屬于較為早起階段,可能存在bug,建議你使用時(shí)手動(dòng)指定版本號(hào)替換掉這個(gè)jar
看來(lái)即使強(qiáng)如Spring團(tuán)隊(duì),也會(huì)出現(xiàn)各種各樣的紕漏呀。這么一想的話,我又敢放心大膽的回去寫(xiě)bug去嘍。
✍總結(jié)
Spring Cloud 2020.0.0是Spring Cloud的主要版本,是非常重要的存在,升級(jí)、改變也是巨大的。特別體現(xiàn)在Netflix模塊的全部移除、Spring Cloud啟動(dòng)方式變了等等。伴隨著Spring Boot 2.4.x以及Spirng Cloud 2020.0的發(fā)布,并且棄用Netflix OSS套件后,必將走入一個(gè)新的深度編程體驗(yàn),滿懷驚喜,很是期待。
說(shuō)明:因?yàn)榇税姹就耆珨P棄掉了Netflix的一套東西,為了跟上時(shí)代,我會(huì)使用一段時(shí)間后,盡快寫(xiě)出最新版本的系列教程,助你少踩坑
文末有提到2020.0版本雖已發(fā)布,但仍舊存在些問(wèn)題。不過(guò)話說(shuō)回來(lái),那些都屬于很小的問(wèn)題,可能在下個(gè)小版本里就得到修復(fù)。但尷尬的是,距離2020年結(jié)束只有不到10天了,倘若進(jìn)入到了2021年,按照版本號(hào)命名新規(guī),彼時(shí)發(fā)出的版本將不能再叫2020.x.x而只能是2021.x.x,顯然這就屬于大版本號(hào)的迭代了,需要謹(jǐn)慎啊。
你覺(jué)得Spring Cloud團(tuán)隊(duì)在2020年還會(huì)發(fā)版嗎?歡迎在評(píng)論區(qū)留下你的看法。
到此這篇關(guān)于Spring Cloud 2020.0.0正式發(fā)布再見(jiàn)了Netflix的文章就介紹到這了,更多相關(guān)Spring Cloud 2020.0.0正式發(fā)布內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Spring事物時(shí)不生效的場(chǎng)景及解決方法
今天介紹一下Spring事物不生效的場(chǎng)景,事物是我們?cè)陧?xiàng)目中經(jīng)常使用的,如果是Java的話,基本上都使用Spring的事物,不過(guò)Spring的事物如果使用不當(dāng),那么就會(huì)導(dǎo)致事物失效或者不回滾,最終導(dǎo)致數(shù)據(jù)不一致,下面我們意義列舉不生效的場(chǎng)景,并給出解決方法2023-09-09SpringBoot項(xiàng)目攔截器獲取Post方法的請(qǐng)求body實(shí)現(xiàn)
本文主要介紹了SpringBoot項(xiàng)目攔截器獲取Post方法的請(qǐng)求body,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01SpringBoot創(chuàng)建RSocket服務(wù)器的全過(guò)程記錄
RSocket應(yīng)用層協(xié)議支持 Reactive Streams語(yǔ)義, 例如:用RSocket作為HTTP的一種替代方案。這篇文章主要給大家介紹了關(guān)于SpringBoot創(chuàng)建RSocket服務(wù)器的相關(guān)資料,需要的朋友可以參考下2021-05-05Spring MVC+MyBatis+MySQL實(shí)現(xiàn)分頁(yè)功能實(shí)例
分頁(yè)功能是我們?nèi)粘i_(kāi)發(fā)中經(jīng)常會(huì)遇到的,下面這篇文章主要給大家介紹了Spring MVC+MyBatis+MySQL實(shí)現(xiàn)分頁(yè)功能的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06Java數(shù)據(jù)結(jié)構(gòu)之查找
本文主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中查找的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧2017-03-03java客戶端線上Apollo服務(wù)端的實(shí)現(xiàn)
這篇文章主要介紹了java客戶端線上Apollo服務(wù)端的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08解決swagger主頁(yè)訪問(wèn),返回報(bào)錯(cuò)500問(wèn)題
在使用Swagger時(shí)遇到500錯(cuò)誤,通過(guò)仔細(xì)的debug發(fā)現(xiàn)問(wèn)題源于注解使用不當(dāng),具體表現(xiàn)為一個(gè)接口的入?yún)⒈诲e(cuò)誤地注解了三個(gè)參數(shù),而實(shí)際上只有兩個(gè),這導(dǎo)致了Swagger在解析時(shí)拋出了NullPointerException異常,解決方法是刪除錯(cuò)誤的第三個(gè)參數(shù)的注解2024-09-09