spring cloud config 分布式配置中心

前言

????Spring Cloud Config是Spring Cloud團(tuán)隊(duì)創(chuàng)建的一個(gè)全新項(xiàng)目躯畴,用來(lái)為分布式系統(tǒng)中的基礎(chǔ)設(shè)施和微服務(wù)應(yīng)用提供集中化的外部配置支持的炼幔,它分為服務(wù)端與客戶(hù)端兩個(gè)部分。其中服務(wù)端也成為分布式配置中心疟赊,它是一個(gè)獨(dú)立的微服務(wù)應(yīng)用棒妨,用來(lái)連接配置倉(cāng)庫(kù)并為客戶(hù)端提供獲取配置信息昭齐、加密/解密信息等訪問(wèn)接口;而客戶(hù)端則是微服務(wù)架構(gòu)中的各個(gè)微服務(wù)應(yīng)用或基礎(chǔ)設(shè)施诀豁,它們通過(guò)指定的配置中心來(lái)管理應(yīng)用資源與業(yè)務(wù)相關(guān)的配置內(nèi)容酪我,并在啟動(dòng)的時(shí)候從配置中心獲取和加載配置信息。Spring Cloud Config實(shí)現(xiàn)了對(duì)服務(wù)端和客戶(hù)端中環(huán)境變量和屬性配置的抽象映射且叁,所以它除了適用于Spring構(gòu)建的應(yīng)用程序之外都哭,也可以在任何其他語(yǔ)言運(yùn)行的應(yīng)用程序中使用。由于Spring Cloud Config實(shí)現(xiàn)的配置中心默認(rèn)采用Git來(lái)存儲(chǔ)配置信息逞带,所以使用spring Cloud Config構(gòu)建的配置服務(wù)器欺矫,天然就支持對(duì)微服務(wù)應(yīng)用配置信息的版本管理,并且可以通過(guò)Git等客戶(hù)端工具來(lái)方便地管理和訪問(wèn)配置內(nèi)容展氓。當(dāng)然它也提供了對(duì)其他存儲(chǔ)方式的支持穆趴,比如SVN倉(cāng)庫(kù)、本地化文件系統(tǒng)遇汞。接下來(lái)未妹,我們從一個(gè)簡(jiǎn)單的入門(mén)示例開(kāi)始學(xué)習(xí)Spring Cloud Config服務(wù)端以及客戶(hù)端的詳細(xì)構(gòu)建與使用方法。

快速入門(mén)

????在本節(jié)中空入,我們將演示如何構(gòu)建基于Git存儲(chǔ)的分布式配置中心络它,同時(shí)對(duì)配置的詳細(xì)規(guī)則進(jìn)行講解,并在客戶(hù)端中演示如何通過(guò)配置指定微服務(wù)應(yīng)用的所屬配置中心歪赢,并讓其能夠從配置中心獲取配置信息并綁定到代碼中的整個(gè)過(guò)程化戳。

構(gòu)建配置中心

通過(guò)Spring Cloud Config構(gòu)建一個(gè)分布式配置中心非常簡(jiǎn)單,只需要以下三步埋凯。

??????創(chuàng)建一個(gè)基礎(chǔ)的Spring Boot工程点楼,命名為config-server,并在pom.xml中引入下面的依賴(lài):

pom.xml

??????創(chuàng)建Spring Boot的程序主類(lèi)白对,并添加@EnableConfigServer注解掠廓,開(kāi)啟Spring Cloud Config的服務(wù)端功能。

主啟動(dòng)類(lèi)

??????在application.properties中添加配置服務(wù)的基本信息以及Git倉(cāng)庫(kù)的相關(guān)信息甩恼,如下所示:

properties

其中Git等配置信息分別表示如下內(nèi)容:

??????spring.cloud.config.server.git.uri:配置Git倉(cāng)庫(kù)位置

??????spring.cloud.config.server.git.searchPaths:配置倉(cāng)庫(kù)路徑下單相對(duì)搜索位置蟀瞧,可以配置多個(gè)

??????spring.cloud.config.server.git.username:訪問(wèn)Git倉(cāng)庫(kù)的用戶(hù)名

??????spring.cloud.config.server.git.password:訪問(wèn)Git倉(cāng)庫(kù)的用戶(hù)密碼

??????spring.cloud.config.label:git倉(cāng)庫(kù)分支名稱(chēng)

????到這里沉颂,使用一個(gè)通過(guò)Spring Cloud Config實(shí)現(xiàn),并使用Git管理內(nèi)容等分布式配置中心就完成了黄橘。我們可以將該應(yīng)用先啟動(dòng)起來(lái)兆览,確保沒(méi)有錯(cuò)誤產(chǎn)生,然后進(jìn)入下面等地學(xué)習(xí)內(nèi)容塞关。

配置規(guī)則詳解

????為了驗(yàn)證上面完全的分布式配置中心config-server抬探,根據(jù)git配置信息中指定的倉(cāng)庫(kù)位置,在https://github.com/erghjmncq6643981/demo/tree/master下創(chuàng)建respo目錄作為配置倉(cāng)庫(kù)帆赢,并根據(jù)不同環(huán)境新建下面4個(gè)配置文件:

??????didispace.properties

??????didispace-dev.properties

??????didispace-test.properties

??????didispace-prod.properties

github中的文件

????在這4個(gè)配置文件中均設(shè)置了一個(gè)from屬性小压,并為每個(gè)配置文件分別設(shè)置了不同的值,如下所示:

??????from=git-default-1.0

??????from=git-dev-1.0

??????from=git-test-1.0

??????from=git-prod-1.0

訪問(wèn)測(cè)試
訪問(wèn)測(cè)試

????為了測(cè)試版本控制椰于,在該Git倉(cāng)庫(kù)的master分支中怠益,我們?yōu)閒rom屬性加入1.0的后綴,同時(shí)創(chuàng)建一個(gè)config-label-test分支瘾婿,并將各配置文件中的值用2.0作為后綴蜻牢。

????完成了這些準(zhǔn)備工作之后,我們就可以通過(guò)瀏覽器偏陪、POSTMAN或CURL等工具直接來(lái)訪問(wèn)我們的配置內(nèi)容了抢呆。訪問(wèn)配置信息的URL與配置文件的映射關(guān)系如下所示:

??????/{application}/{profile}[/{label}]

??????/{application}-{profile}.yml

??????/{application}-{profile}.properties

??????/{label}/{application}-{profile}.properties

????上面的url會(huì)映射{application}-{profile}.properties對(duì)應(yīng)的配置文件,其中{label}對(duì)應(yīng)Git上不同的分支笛谦,默認(rèn)為master抱虐。我們可以嘗試構(gòu)造不同的url來(lái)訪問(wèn)不同的配置內(nèi)容,比如要訪問(wèn)kyle分支饥脑,didispace應(yīng)用的prod不同的配置內(nèi)容恳邀,比如,要訪問(wèn)kyle分支灶轰,didispace應(yīng)用的prod環(huán)境谣沸,就可以訪問(wèn)這個(gè)url:http://localhost:8888/didispace/prod/kyle,并獲得如下返回信息框往。

訪問(wèn)測(cè)試
訪問(wèn)測(cè)試

????我們可以看到該JSON中返回了應(yīng)用名didispace鳄抒,環(huán)境名prod,分支名kyle椰弊,以及默認(rèn)default環(huán)境和prod環(huán)境的配置內(nèi)容。另外瓤鼻,之前沒(méi)有提到過(guò)的version秉版,從下圖我們可以觀察到,它對(duì)應(yīng)的是在Git上的commit號(hào)茬祷。

git上的commit號(hào)

????同時(shí)清焕,我們可以看到config-server的控制臺(tái)中還輸出了下面的內(nèi)容,配置服務(wù)器在從Git中獲取配置信息后,會(huì)存儲(chǔ)一份在config-server的文件系統(tǒng)中秸妥,實(shí)質(zhì)上config-sever是通過(guò)git clone的文件系統(tǒng)中滚停,實(shí)質(zhì)上config-server是通過(guò)git clone命令將配置內(nèi)容復(fù)制了一份在本地存儲(chǔ),然后讀取這些內(nèi)容并返回給微服務(wù)應(yīng)用進(jìn)行加載粥惧。

本地保存的地址

????config-server通過(guò)Git在本地倉(cāng)庫(kù)暫存键畴,可以有效防止當(dāng)Git倉(cāng)庫(kù)出現(xiàn)故障而引起無(wú)法加載配置信息的情況。我們可以通過(guò)斷開(kāi)網(wǎng)絡(luò)突雪,再次發(fā)起http://localhost:8888/didispace/prod/kyle請(qǐng)求起惕,在控制臺(tái)中可輸出Could not pull remote for kyle,但是它依然會(huì)為該請(qǐng)求返回配置內(nèi)容咏删,這些內(nèi)容源于之前訪問(wèn)時(shí)存于config-server本地文件系統(tǒng)中的配置內(nèi)容惹想。

無(wú)法連接github場(chǎng)景測(cè)試

基礎(chǔ)架構(gòu)

????在動(dòng)手實(shí)踐了上面關(guān)于Spring Cloud Config的基礎(chǔ)入門(mén)內(nèi)容之后,在這里我們深入理解一些它是如何運(yùn)作起來(lái)的督函。下面所示的是上一節(jié)我們構(gòu)建案例的基本結(jié)構(gòu)嘀粱。

????其中,主要包含下面幾個(gè)要素辰狡。

??????遠(yuǎn)程Git倉(cāng)庫(kù):用來(lái)存儲(chǔ)配置文件的地方锋叨,上例中我們用來(lái)存儲(chǔ)針對(duì)應(yīng)用名為didispace的多環(huán)境配置文件:didispace-{profile}.properties。

??????Config Server:這是我們上面構(gòu)建的分布式配置中心搓译,config-server工程悲柱,在該工程中指定了所要連接的Git倉(cāng)庫(kù)位置以及賬戶(hù)、密碼等連接信息些己。

??????本地Git倉(cāng)庫(kù):在Config Server的文件系統(tǒng)中豌鸡,每次客戶(hù)端請(qǐng)求獲取配置信息時(shí),Config Server從Git倉(cāng)庫(kù)中獲取最新配置到本地段标,然后客戶(hù)端請(qǐng)求獲取配置信息時(shí)涯冠,Config Server從Git倉(cāng)庫(kù)中獲取最新配置到本地,然后在本地Git倉(cāng)庫(kù)中讀取并返回逼庞。當(dāng)遠(yuǎn)程倉(cāng)庫(kù)無(wú)法獲取時(shí)蛇更,直接將本地內(nèi)容返回。

??????Service A赛糟、Service B:具體的微服務(wù)應(yīng)用派任,它們指定了Config Server的地址,從而實(shí)現(xiàn)從外部獲取應(yīng)用自己要用的配置信息璧南。這些應(yīng)用在啟動(dòng)的時(shí)候掌逛,會(huì)向Config Server請(qǐng)求獲取配置信息來(lái)進(jìn)行加載。

spring cloud config

客戶(hù)端應(yīng)用從配置管理中獲取配置信息遵從下面的執(zhí)行流程:

????應(yīng)用啟動(dòng)時(shí)司倚,根據(jù)bootstrap.properties中配置的應(yīng)用名{application}豆混、環(huán)境名{profile}篓像、分支名{label},向Config Server請(qǐng)求獲取配置信息皿伺。

????Config Server根據(jù)自己維護(hù)的Git倉(cāng)庫(kù)信息和客戶(hù)端傳遞過(guò)來(lái)的配置定位信息去查找配置信息员辩。

????通過(guò)git clone命令將找到的配置信息下載到Config Server的文件系統(tǒng)中。

????Config Server創(chuàng)建Spring的Applicationcontext實(shí)例鸵鸥,并從Git本地倉(cāng)庫(kù)中加載配置文件奠滑,最后將這些配置內(nèi)容讀取出來(lái)返回給客戶(hù)端應(yīng)用。

????客戶(hù)端應(yīng)用在獲得外部配置文件后加載到客戶(hù)端的ApplicationContext實(shí)例脂男,該配置內(nèi)容的優(yōu)先級(jí)高于客戶(hù)端Jar包內(nèi)部的配置內(nèi)容养叛,所以在Jar包中重復(fù)的內(nèi)容將不再被加載。

????Config Server巧妙地通過(guò)git clone將配置信息存于本地宰翅,起到緩存的作用弃甥,即使當(dāng)Git服務(wù)端無(wú)法訪問(wèn)的時(shí)候,依賴(lài)可以取Config Server中的緩存內(nèi)容進(jìn)行使用汁讼。

Git配置倉(cāng)庫(kù)

????在Spring Cloud Config的服務(wù)端淆攻,對(duì)于配置倉(cāng)庫(kù)的默認(rèn)實(shí)現(xiàn)采用了Git。Git非常適用于存儲(chǔ)配置內(nèi)容嘿架,它可以非常方便地使用各種第三方工具來(lái)對(duì)其進(jìn)行管理更新和版本化瓶珊,同時(shí)Git倉(cāng)庫(kù)倉(cāng)庫(kù)的Hook功能還可以幫助我們實(shí)時(shí)監(jiān)控配置內(nèi)容的修改。其中耸彪,Git自身的版本控制功能正是其他一些配置中心所欠缺的伞芹,通過(guò)Git進(jìn)行存儲(chǔ)意味著,一個(gè)應(yīng)用的不同部署實(shí)例可以從Spring Cloud Config的服務(wù)端獲取不同的版本配置蝉娜,從而支持一些特殊的應(yīng)用場(chǎng)景唱较。

????由于Spring Cloud Config中默認(rèn)使用Git,所以對(duì)于Git的配置非常簡(jiǎn)單召川,只需在Config Server的application.properties中設(shè)置spring.cloud.config.server.git.uri屬性南缓,為其指定Git倉(cāng)庫(kù)的網(wǎng)絡(luò)地址和賬戶(hù)信息即可,比如在快速入門(mén)一節(jié)中的例子:

config-server

????如果我們將該值通過(guò)file://前綴來(lái)設(shè)置為一個(gè)文件地址(在Windows系統(tǒng)中荧呐,需要使用file:///來(lái)定位文件內(nèi)容)汉形,那么它將以本地倉(cāng)庫(kù)的方式運(yùn)行,這樣我們就可以脫離Git服務(wù)端來(lái)進(jìn)行調(diào)試與開(kāi)發(fā)倍阐,比如:

本地倉(cāng)庫(kù)

????其中概疆,${user.home}代表當(dāng)前用戶(hù)的所屬目錄。file://配置的本地文件系統(tǒng)方式雖然對(duì)于本地開(kāi)發(fā)調(diào)試時(shí)使用非常方便峰搪,但是該方式也僅用于開(kāi)發(fā)與測(cè)試届案,在生產(chǎn)環(huán)境中,請(qǐng)務(wù)必大家自己的Git倉(cāng)庫(kù)來(lái)存儲(chǔ)配置資源罢艾。

占位符配置URI

????{application}楣颠、{profile}、{label}這些占位符除了用于標(biāo)識(shí)配置文件的規(guī)則之外咐蚯,還可以用于Config Server中對(duì)Git倉(cāng)庫(kù)地址的URI配置童漩。比如,我們可以通過(guò){application}占位符來(lái)實(shí)現(xiàn)一個(gè)應(yīng)用對(duì)應(yīng)一個(gè)Git倉(cāng)庫(kù)目錄的配置效果春锋,具體配置實(shí)現(xiàn)如下:

占位符配置

????其中矫膨,{application}代表了應(yīng)用名,所以當(dāng)客戶(hù)端應(yīng)用向Config Server發(fā)起獲取配置的請(qǐng)求時(shí)期奔,Config Server會(huì)根據(jù)客戶(hù)端spring.application.name信息來(lái)填充{application}占位符以定位配置資源的存儲(chǔ)位置侧馅,從而實(shí)現(xiàn)根據(jù)微服務(wù)應(yīng)用的屬性動(dòng)態(tài)獲取不同的位置的配置。另外呐萌,這些占位符中馁痴,{label}參數(shù)較為特別,如果Git的分支和標(biāo)簽名包含"/"肺孤,那么{label}參數(shù)在HTTP的URL中應(yīng)該使用"(_)"來(lái)替代罗晕,以避免改變了URI含義,指向到其他的URI資源赠堵。

properties文件配置方式

github中目錄結(jié)構(gòu)必須如下所示

github中的目錄結(jié)構(gòu)

注意:假如使用yml文件小渊,需要在占位符上加'',如下圖所示

yml文件配置方式

?當(dāng)我們使用Git作為配置中心來(lái)存儲(chǔ)各個(gè)微服務(wù)應(yīng)用配置文件的時(shí)候茫叭,該功能會(huì)變得非常有用酬屉,通過(guò)在URI中使用占位符可以幫助我們規(guī)劃和實(shí)現(xiàn)通用的倉(cāng)庫(kù)配置。例如揍愁,我們可以對(duì)微服務(wù)應(yīng)用做如下規(guī)劃呐萨。

??????代碼庫(kù):使用服務(wù)名作為Git倉(cāng)庫(kù)名稱(chēng),比如會(huì)員服務(wù)的代碼庫(kù)https://github.com/erghjmncq6643981/demo/respo/member-service吗垮。

??????配置庫(kù):使用服務(wù)名加上-config后綴作為Git倉(cāng)庫(kù)名稱(chēng)垛吗,比如上面會(huì)員服務(wù)對(duì)應(yīng)的配置庫(kù)地址位置https://github.com/erghjmncq6643981/demo/respo/member-service-config。

????這時(shí)烁登,我們就可以通過(guò)使用spring.cloud.config.server.git.rui=https://github.com/erghjmncq6643981/demo/respo/{application}-config配置怯屉,來(lái)同時(shí)匹配多個(gè)不同服務(wù)的配置倉(cāng)庫(kù)。

配置多個(gè)倉(cāng)庫(kù)

Config Server除了可以通過(guò)application和profile模式來(lái)匹配配置倉(cāng)庫(kù)之外饵沧,還支持通過(guò)帶有通配符的表達(dá)式來(lái)匹配锨络,以實(shí)現(xiàn)更為復(fù)雜的配置需求。并且當(dāng)我們有多個(gè)匹配規(guī)則的時(shí)候狼牺,還可以用逗號(hào)來(lái)分割多個(gè){application}/{profile}配置規(guī)則羡儿,比如:

多倉(cāng)庫(kù)

????上述配置內(nèi)容通過(guò)spring.cloud.config.server.git.uri屬性,指定了一個(gè)默認(rèn)的倉(cāng)庫(kù)位置是钥,當(dāng)使用{application}/{profile}模式未能匹配到合適的倉(cāng)庫(kù)時(shí)掠归,就將在該默認(rèn)倉(cāng)庫(kù)位置下獲取配置信息缅叠。除此之外,還配置了三個(gè)倉(cāng)庫(kù)虏冻,分別是dev肤粱、test、prod厨相。其中dev倉(cāng)庫(kù)匹配dev/*的模式领曼,所以無(wú)論profile是什么,它都能匹配application名稱(chēng)為dev的應(yīng)用蛮穿。并且我們可以注意到庶骄,它存儲(chǔ)的配置文件位置還采用了Config Server的本地文件系統(tǒng)中的內(nèi)容。對(duì)于此配置践磅,我們可以通過(guò)訪問(wèn)http://localhost8888/dev/profile的請(qǐng)求來(lái)驗(yàn)證到該倉(cāng)庫(kù)的配置內(nèi)容单刁,其中profile可以為任意值。而test和prod倉(cāng)庫(kù)均使用了Git倉(cāng)庫(kù)的存儲(chǔ)音诈,并且test倉(cāng)庫(kù)未配置匹配規(guī)則幻碱,所以它只匹配application名為test的應(yīng)用;prod倉(cāng)庫(kù)則需要匹配application為prod并且profile為pp開(kāi)頭细溅,或者application為online并且profile為oo開(kāi)頭的應(yīng)用和環(huán)境褥傍。

????當(dāng)配置多個(gè)倉(cāng)庫(kù)的時(shí)候,Config Server在啟動(dòng)時(shí)會(huì)直接克隆第一個(gè)倉(cāng)庫(kù)的配置庫(kù)喇聊,其他的配置庫(kù)只有在請(qǐng)求時(shí)才會(huì)克隆到本地恍风,所以對(duì)于倉(cāng)庫(kù)排列可以根據(jù)配置內(nèi)容的重要程度有所區(qū)分。另外誓篱,如果表達(dá)式是以通配符開(kāi)始的朋贬,那么需要使用引號(hào)將配置內(nèi)容引起來(lái)。

安全保護(hù)

????由于配置中心存儲(chǔ)的內(nèi)容比較敏感窜骄,做一定的安全處理是必需的锦募。為配置中心實(shí)現(xiàn)安全保護(hù)的方式有很多,比如物理網(wǎng)絡(luò)限制邻遏、OAuth2授權(quán)等糠亩。不過(guò),由于我們的微服務(wù)應(yīng)用和配置中心都構(gòu)建于Spring Boot基礎(chǔ)上准验,所以與Spring Security結(jié)合使用會(huì)更加方便赎线。

? ? ? ?我們只需要在配置中心的pom.xml中加入spring-boot-starter-security依賴(lài),不需要做任何其他改動(dòng)就能實(shí)現(xiàn)對(duì)配置中心訪問(wèn)的安全保護(hù)糊饱。

pom.xml新增jar

????默認(rèn)情況下垂寥,我們可以獲得一個(gè)名為user的用戶(hù),并且在配置中心啟動(dòng)的時(shí)候,在日志中打印該用戶(hù)的隨機(jī)密碼滞项,具體如下:

控制臺(tái)輸出

????大多數(shù)情況下狭归,我們并不會(huì)使用隨機(jī)生成密碼的機(jī)制。我們可以在配置文件中指定用戶(hù)和密碼蓖扑,比如:

config-server的配置

????由于我們已經(jīng)為config-server設(shè)置了安全保護(hù)唉铜,如果這時(shí)候連接到配置中心的客戶(hù)端中沒(méi)有設(shè)置對(duì)應(yīng)的安全信息,在獲取配置信息時(shí)會(huì)返回401錯(cuò)誤律杠。所以,需要通過(guò)配置的方式在客戶(hù)端中加入安全信息來(lái)通過(guò)校驗(yàn)竞惋,比如:

config-client的配置

加密解密

????在微服務(wù)架構(gòu)中柜去,我們通常會(huì)采用DevOps的組織方式來(lái)降低因團(tuán)隊(duì)間溝通造成的巨大成本,以加速微服務(wù)應(yīng)用的交付能力拆宛。這就使得原本由運(yùn)維團(tuán)隊(duì)控制的線上信息將交由微服務(wù)所屬組織的成員自行維護(hù)嗓奢,其中將會(huì)包括大量的敏感信息,比如數(shù)據(jù)庫(kù)的賬戶(hù)與密碼等浑厚。顯然股耽,如果我們直接將敏感信息以明文的方式存儲(chǔ)于微服務(wù)應(yīng)用的配置文件中是非常危險(xiǎn)的。針對(duì)這個(gè)問(wèn)題钳幅,Spring Cloud Config提供了對(duì)屬性進(jìn)行加密解密的功能物蝙,以保護(hù)配置文件中的信息安全。比如下面的例子:

加密信息

????在Spring Cloud Config中通過(guò)在屬性值前使用{cipher}前綴來(lái)標(biāo)注該內(nèi)容是一個(gè)加密值敢艰,當(dāng)微服務(wù)客戶(hù)端加載配置時(shí)诬乞,配置中心會(huì)自動(dòng)為帶有{cipher}前綴的值進(jìn)行解密。通過(guò)該機(jī)制的實(shí)線钠导,運(yùn)維團(tuán)隊(duì)就可以放心地將線上信息的加密資源給到微服務(wù)團(tuán)隊(duì)震嫉,而不用擔(dān)心這些敏感信息遭到泄露了。下面我們來(lái)具體介紹如何在配置中心使用該項(xiàng)功能牡属。

使用前提

????在使用Spring Cloud Config的加密解密功能時(shí)票堵,有一個(gè)必要的前提需要我們注意。為了啟用該功能逮栅,我們需要在配置中心的運(yùn)行環(huán)境中安裝不限長(zhǎng)度的JCE版本(Unlimited Strength Java Cryptography Extension)悴势。雖然,JCE功能在JRE中自帶证芭,但是默認(rèn)使用的是長(zhǎng)度限制的版本瞳浦。我們可以從Oracle的官方網(wǎng)站下載到它,它是一個(gè)壓縮包废士,解壓后可以看到下面三個(gè)文件:

Unlimited Strength Java Cryptography Extension

????我們需要將local_policy.jar和US_export_policy.jar兩個(gè)文件復(fù)制到$JAVA_HOME/jre/lib/security目錄下叫潦,覆蓋原來(lái)的默認(rèn)內(nèi)容。到這里官硝,加密解密的準(zhǔn)備工作就完成了矗蕊。

覆蓋

相關(guān)端點(diǎn)

????在完成了JCE的安裝后短蜕,可以嘗試啟動(dòng)配置中心。在控制臺(tái)中傻咖,將會(huì)輸出一些配置中心持有的端點(diǎn)朋魔,主要包括如下幾個(gè)。

??????/encrypt/status:查看加密功能狀態(tài)的端點(diǎn)卿操。

??????/key:查看密鑰的端點(diǎn)警检。

??????/encrypt:對(duì)請(qǐng)求的body內(nèi)容進(jìn)行加密的端點(diǎn)。

??????/decrypt:對(duì)請(qǐng)求的body內(nèi)容進(jìn)行解密的端點(diǎn)害淤。

可以嘗試通過(guò)GET請(qǐng)求訪問(wèn)/encrypt/status端點(diǎn)扇雕,我們將得到如下內(nèi)容;


端點(diǎn)測(cè)試

????該返回信息說(shuō)明當(dāng)前配置中心的加密功能還不能使用窥摄,因?yàn)闆](méi)有為加密服務(wù)配置對(duì)應(yīng)的密鑰镶奉。

重置密鑰

????我們可以通過(guò)encrpt.key屬性在配置文件中直接指定密鑰信息(對(duì)稱(chēng)性密鑰),比如:

key

????加入上述配置信息后崭放,重啟配置中心哨苛,再訪問(wèn)/encrpt/status端點(diǎn),我們將得到如下內(nèi)容:????

端口測(cè)試

????此時(shí)币砂,我們配置中心的加密解密功能就已經(jīng)可以使用了建峭,不妨嘗試訪問(wèn)一下/encrypt和/decrypt端點(diǎn)來(lái)使用加密和解密的功能。注意道伟,這兩個(gè)端點(diǎn)都說(shuō)POST請(qǐng)求迹缀,加密和解密信息需要通過(guò)請(qǐng)求體來(lái)發(fā)送。比如蜜徽,以curl命令為例祝懂,我們可以通過(guò)下面的方式調(diào)用加密與解密端點(diǎn):

curl測(cè)試


加密測(cè)試
解密測(cè)試

????這里,我們通過(guò)配置encrypt.key參數(shù)來(lái)指定密鑰的實(shí)現(xiàn)方式采用了對(duì)稱(chēng)性加密拘鞋。這種方式實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單砚蓬,只需要配置一個(gè)參數(shù)即可。另外盆色,我們也可以使用環(huán)境變量ENCRYPT_KEY來(lái)進(jìn)行配置灰蛙,讓密鑰信息外部化存儲(chǔ)。

gihub配置加密參數(shù)
客戶(hù)端調(diào)用測(cè)試

客戶(hù)端配置映射

????在完成了上述驗(yàn)證之后隔躲,確定配置服務(wù)中心已經(jīng)正常運(yùn)作摩梧,下面我們嘗試如何在服務(wù)應(yīng)用中獲取上述 配置信息。

??????創(chuàng)建一個(gè)Spring Boot應(yīng)用宣旱,命名config-client仅父,并在pom.xml中引入下述依賴(lài):

config-server-client的pom.xml

??????創(chuàng)建Spring Boot的應(yīng)用主類(lèi),具體如下:

config-server-client的啟動(dòng)類(lèi)

??????創(chuàng)建bootstrap.properties配置,來(lái)指定獲取配置文件的config-server位置笙纤,例如:

config-server-client的properties

上述配置參數(shù)與Git中存儲(chǔ)的配置文件中各個(gè)部分的對(duì)應(yīng)關(guān)系如下所示耗溜。

??????spring.application.name:對(duì)應(yīng)配置文件規(guī)則中的{application}部分

??????spring.cloud.config.profile:對(duì)應(yīng)配置文件規(guī)則中的{profile}部分

??????spring.cloud.config.label:對(duì)應(yīng)配置文件中的{label}部分

??????spring.cloud.config.uri:配置中心config-server的地址

??????spring.cloud.config.discovery.enabled:使用注冊(cè)中心找尋config-server的地址

??????spring.cloud.config.discovery.serviceId:配置中心在注冊(cè)中心的applicationName

????這里需要格外注意,上面這些屬性必須配置在bootstrap.properties中省容,這樣config-server中的配置信息才能被正確加載抖拴。在第2章中,我們?cè)敿?xì)說(shuō)明了Spring Boot對(duì)配置文件的加載順序腥椒,對(duì)于本應(yīng)用jar包之外的配置文件加載會(huì)優(yōu)先與應(yīng)用jar包內(nèi)的配置內(nèi)容阿宅,而通過(guò)bootstrap.properties對(duì)config-server的配置,使得該應(yīng)用會(huì)從實(shí)現(xiàn)了外部化配置寞酿。

??????創(chuàng)建一個(gè)RESTful接口來(lái)返回配置中心的from屬性家夺,通過(guò)@Value("from")綁定配置服務(wù)中配置的from屬性,具體實(shí)現(xiàn)如下:

config-server-client的接口測(cè)試

??????除了通過(guò)@Value注解綁定注入之外伐弹,也可以通過(guò)Environment對(duì)對(duì)象來(lái)獲取配置屬性,比如:

config-server-client的接口(第二種方式)

????啟動(dòng)config-client應(yīng)用榨为,并訪問(wèn)http://localhost:8881/from惨好,我們就可以根據(jù)配置內(nèi)容輸出對(duì)應(yīng)環(huán)境的from內(nèi)容了。根據(jù)當(dāng)前配置随闺,我們可以獲得如下返回的內(nèi)容:

測(cè)試結(jié)果

????可以繼續(xù)通過(guò)修改bootstrap.properties中的配置內(nèi)容獲取不同的配置信息來(lái)熟悉配置服務(wù)中的配置規(guī)則日川。

如果需要給我修改意見(jiàn)的發(fā)送郵箱:erghjmncq6643981@163.com

本博客的代碼示例已上傳GitHub:分布式配置中心https://github.com/erghjmncq6643981/SpringCloudConfig

資料參考:《Spring Cloud 微服務(wù)實(shí)戰(zhàn)》

轉(zhuǎn)發(fā)博客,請(qǐng)注明矩乐,謝謝龄句。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市散罕,隨后出現(xiàn)的幾起案子分歇,更是在濱河造成了極大的恐慌,老刑警劉巖欧漱,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件职抡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡误甚,警方通過(guò)查閱死者的電腦和手機(jī)缚甩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窑邦,“玉大人擅威,你說(shuō)我怎么就攤上這事「郧眨” “怎么了郊丛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我宾袜,道長(zhǎng)捻艳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任庆猫,我火速辦了婚禮认轨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘月培。我一直安慰自己嘁字,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布杉畜。 她就那樣靜靜地躺著纪蜒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪此叠。 梳的紋絲不亂的頭發(fā)上纯续,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音灭袁,去河邊找鬼猬错。 笑死,一個(gè)胖子當(dāng)著我的面吹牛茸歧,可吹牛的內(nèi)容都是我干的倦炒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼软瞎,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逢唤!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起涤浇,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鳖藕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后芙代,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體吊奢,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年纹烹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了页滚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铺呵,死狀恐怖裹驰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情片挂,我是刑警寧澤幻林,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布贞盯,位于F島的核電站,受9級(jí)特大地震影響沪饺,放射性物質(zhì)發(fā)生泄漏躏敢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一整葡、第九天 我趴在偏房一處隱蔽的房頂上張望件余。 院中可真熱鬧,春花似錦遭居、人聲如沸啼器。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)端壳。三九已至,卻和暖如春枪蘑,著一層夾襖步出監(jiān)牢的瞬間损谦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工岳颇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留成翩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓赦役,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親栅炒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掂摔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容