您好,登錄后才能下訂單哦!
這篇文章主要介紹“Spring Config的使用方法”,在日常操作中,相信很多人在Spring Config的使用方法問題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Spring Config的使用方法”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
配置其實(shí)分為結(jié)構(gòu)和內(nèi)容兩個(gè)方面,結(jié)構(gòu)對(duì)應(yīng)的是代碼,比如1.0.0新開發(fā)的代碼上有一個(gè)功能開關(guān)${feature.switchA}
,但master上還沒有,這就是結(jié)構(gòu)的變化。另一方面是內(nèi)容,1.0.0的開發(fā)分支有兩個(gè)測(cè)試環(huán)境,連著不同的數(shù)據(jù)庫(kù),那么對(duì)應(yīng)的${mysql.url}
的內(nèi)容肯定不同。
內(nèi)容的類別上也可以分為三種:業(yè)務(wù)配置,功能開關(guān),服務(wù)配置。
Spring Cloud的配置中心是Spring Config,經(jīng)過兩年的使用,發(fā)現(xiàn)了其中不少的問題,有些是使用問題,有些是Spring Config本身的管理能力導(dǎo)致的問題。
Spring Config首推基于git的管理方式,提供了兩個(gè)管理維度,一個(gè)是label(即branch),一個(gè)是profile。當(dāng)服務(wù)foo在一套代碼下要安裝多套環(huán)境,比如預(yù)發(fā)布環(huán)境有2套,一套在shanghai機(jī)房,一套在beijing機(jī)房。那么比較自然的管理維度就是利用profile,foo-shanghai.yaml以及foo-beijing.yaml。當(dāng)生產(chǎn)環(huán)境也依然需要2臺(tái)時(shí),怎么處理呢?這時(shí)候就會(huì)有兩種做法,一種利用增加label維度做區(qū)分,一種依然只用profile。
Name | Branch | Profile |
---|---|---|
foo-shanghai.yaml | stg | shanghai |
foo-beijing.yaml | stg | beijing |
foo-shanghai.yaml | prd | shanghai |
foo-beijing.yaml | Prd | beijing |
branch其實(shí)表示的是結(jié)構(gòu),即對(duì)應(yīng)不同的代碼,而profile對(duì)應(yīng)的是內(nèi)容。 |
這種方式有什么問題?一般應(yīng)用都是只有profile來(lái)區(qū)分環(huán)境,比如logback要分環(huán)境區(qū)分配置也是通過<springProfile>
來(lái)指定。一旦采用兩個(gè)維度來(lái)確定唯一的配置,那么所有項(xiàng)目都需要有label
這個(gè)變量。
試想如果foo這個(gè)應(yīng)用在線上有個(gè)bug需要fix,勢(shì)必會(huì)增加一個(gè)hotfix的branch在配置中心,同時(shí)還需要增加相應(yīng)的profile,對(duì)應(yīng)foo的label
變量設(shè)置為hotfix,profile
設(shè)置為beijing或者shanghai。
再考慮另一種情況,foo在prd的代碼需要放到stg進(jìn)行驗(yàn)證如何處理?foo的代碼版本肯定是prd的(因?yàn)閟tg的配置結(jié)構(gòu)也許已經(jīng)變了),但profile需要用stg的環(huán)境。這時(shí)實(shí)際上只能在配置中心的prd分支上新建一個(gè)新的profile來(lái)臨時(shí)滿足這種需求。
Name | Branch | Profile |
---|---|---|
foo-stg-shanghai.yaml | master | stg-shanghai |
foo-stg-beijing.yaml | master | stg-beijing |
foo-prd-shanghai.yaml | master | prd-shanghai |
foo-prd-beijing.yaml | master | prd-beijing |
這種方式可以降低管理維度,即放棄label的維度,只有profile的維度。同樣的問題,如果foo這個(gè)應(yīng)用在線上有個(gè)bug需要fix,那么需要新增兩個(gè)profile,hotfix-beijing和hotfix-shanghai。雖然維度降低了,但是管理上卻有些麻煩。因?yàn)閙aster的這個(gè)分支無(wú)法保護(hù)起來(lái),如果有開發(fā)人員直接修改了prd-XXX的環(huán)境就會(huì)導(dǎo)致線上問題。
同樣的,foo在prd的代碼需要放到stg進(jìn)行驗(yàn)證如何處理?foo的代碼版本肯定是prd的(因?yàn)閟tg的配置結(jié)構(gòu)也許已經(jīng)變了),但profile需要用stg的環(huán)境。這時(shí)實(shí)際上只能再配置中心新建一個(gè)profile,比如stg-oldshanghai,來(lái)滿足這種需求。
然而我們知道,增加新的profile其實(shí)還是挺麻煩的事情,如果代碼中有直接比較profile的邏輯,那么往往容易出現(xiàn)問題。
有沒有不臨時(shí)增加profile的辦法呢?其實(shí)仔細(xì)思考一下,在stg環(huán)境驗(yàn)證prd的服務(wù),真正的邏輯是什么?是希望用stg環(huán)境的配置內(nèi)容,以及stg某個(gè)歷史版本(與prd匹配的)的配置結(jié)構(gòu)。所以縱向維度我們需要的其實(shí)是version,profile都是stg-shanghai,而version一個(gè)是1.0.0,一個(gè)是latest。
好了,現(xiàn)在我們來(lái)綜合一下兩種方式,可以使用git的分支作為version,profile依然還是按照方法二來(lái)區(qū)分。畢竟頻繁增加環(huán)境的可能性不高。但是如果要同時(shí)維護(hù)一個(gè)profile兩個(gè)分支,其實(shí)還是要來(lái)回切換的,比較麻煩,這也是Spring Config為人詬病的管理功能弱。好在Spring Cloud也支持mysql,用mysql同時(shí)管理多個(gè)label的內(nèi)容還是方便不少,只是git自帶的“后悔藥”(history)功能沒有了。所以說(shuō)還是有利有弊。
如果想要更完善的配置管理工具,建議還是使用Apollo。要想用好Spring Cloud,必須可以忍受它比較弱的管理能力,并且做好前期規(guī)劃,結(jié)合項(xiàng)目特點(diǎn)來(lái)使用label和profile的能力。
到此,關(guān)于“Spring Config的使用方法”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。