最近公司想讓我看看微服務html
正好我也想看看新東西,每天解決業務問題。。。太沒有激情了。。。並且咱們大多應用都仍是springmvc
,springboot
的應用都不多,只有幾個,唉,我也是深陷業務問題中spring
Spring Cloud
也算是一個全家桶吧,裏面東西也多,不過從感受開箱即用的原則來看,用起來也比較順手,demo
也都很好搭建,
從開始的網關+服務的着手,網關我採用的Zuul
,服務治理採用的eureka
,後面想用spring cloud config
做爲配置中心,可是還要本身搭一個server
非常麻煩。。。我也懶。。。無心聽同事說,其實全家桶裏服務治理能夠用spring cloud consul
,而consul
就自帶一個配置功能,因而我去了解了spring cloud consul config
spring cloud consul config
自己依賴spring cloud consul
的agent server
,因此只要agent server
啓動了,其實就至關於有了一個server
來作配置,我滿心歡喜的把服務治理eureka
改成spring cloud consul
,嗖嗖兩下,spring cloud consul
也配置好了
命令行裏執行了,啓動測試模式的agent server
數據庫
consul agent -dev
打開localhost:8500
, 很明顯有了一個相似配置中心的菜單bootstrap
點開進去啥也沒有。。。只有右邊一個建立按鈕springboot
也沒灰心,我先是去官網介紹看了看 官網連接描述mvc
我認可我英語是差了。。。看了半天,我真是沒看明白怎麼使用。。。當時我有點懵逼,說好的很好操做的呢
沒辦法,我只有去百度了哈,看了不少文章,基本全部文章說的都是差不太多,可是這個差不太多又都沒有說清楚到底怎麼玩。。。
好吧,這個時候我有點認可我本身理解能力有點問題了,心想既然你們都沒有說清楚,估計應該就是很容易理解,因此你們心領神會,我又反覆讀了哈官方的描述,而且找了springcloud.cc
裏的中文說明文檔,仍是沒看太懂。。。app
當時我真的以爲有點懵了。。。心想今天算了仍是不想這個,明天再想,因而我去把demo
的網關換成了spring cloud gateway
,這個基本沒有半個小時就搞定了,仍是比較簡單的spring-boot
次日也就是今天,我再次來看了哈文檔,百度的幾篇文章除了說明了一點,要加一個配置文件bootstrap.yml
,這裏面要去指定一些spring cloud consul config
的一些配置,而且意思感受是application.yml
裏的配置均可以不用寫了,徹底維護在spring cloud consul config
裏,可是spring cloud consul config
到底在哪,我仍是沒法把須要配置的屬性,application.yml
和consul agent
裏剛一片空白的配置頁面,這三者聯繫起來微服務
終於無心中,我發現有一篇文章的一句話讓我警醒了。。。他不是像其餘文章說一些貌似你們都懂的話,而是很是鄭重了說了一句測試
感受這難道也是一個理解能力和我差很少,可是比我強的人麼。。。他這麼一句讓我明白,確實官網說的也不太明白,最後那句體會一下,我再去反覆看了文章,和本身試驗。。。
懂了以後再回過頭來看,spring cloud consul config
仍是真的真的很是簡單的。。。其實就是想要用spring cloud consul config
,你要和它的一些約定或者說它的規範匹配起就完事了,剩下就跟普通的配置文件同樣了,接下來我用我本身的理解來講明哈spring cloud consul config
怎麼使用,固然前提你對於服務治理consul
有點點了解哈
spring cloud consul config
其實就是一個服務的配置中心,配置統一管理的地方,你哪一個服務須要這個配置中心,你就在那個服務里加上依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-config</artifactId> </dependency>
以後在該服務的resources目錄下新增一個bootstrap.yml
文件,裏面加上這些就夠了
spring: cloud: consul: config: format: yaml default-context: gateway
format
默認是key_value
的形式,可是我如今很喜歡用yaml
形式的配置文件,default-context
根據你的應用取吧,相似與spring.application.name
屬性同樣,區分服務的
完事以後,在consul agent
剛那個頁面裏建立一個目錄,對,是目錄,目錄名必定要像這樣config/gateway/data
也就是config
和data
目錄都是默認值,你沒有配置的時候,就不用管,可是你必須這麼寫,中間那個gateway
就是剛那個 default-context
,這樣consul agent
頁面和bootstrap.xml
就映射起來了,接下來你就能夠在下面的value
裏像yaml
文件一下寫配置了
固然你想改目錄的兩個默認值,你就能夠這麼修改了,對應prefix
和data-key
,把默認值寫出來就一眼清楚了
spring: cloud: consul: config: format: yaml default-context: gateway prefix: config data-key: data
因此仍是簡單的,固然還有個問題,要是多個環境的不一樣配置怎麼來的,嘿嘿,這是個關鍵問題,由於這個處理,讓我實在沒有想到,通常咱們不用配置中心的時候,在工程裏配置,能夠按照application-test.yml
和application-prod.yml
來區分環境,這個spring cloud consul config
也是能夠的,不過不是建立config/gateway/data/test
,亦或是config/gateway/data/prod
這種。。。天真
config/gateway,test/data
和config/gateway,data/data
,沒錯,你沒有看錯,服務名和環境中間用逗號分開。。。並且這個中間分隔符逗號仍是支持可配。。。默認是逗號。。。你還能夠用屬性profile-separator
進行修改
spring: cloud: consul: config: format: yaml default-context: gateway prefix: config data-key: data profile-separator: ','
可能我是一個比較傳統的程序猿。。。這種逗號分開的目錄命名方式對我來講仍是有點衝擊的。。。再回過頭看官方的文檔,也算是有點明白了。。。真的仍是個人理解能力太差
最後你能夠像日常寫配置文件一下,這麼根據環境來配置了
----------------------------------------------------------------------華麗的分割線------------------------------------
這裏簡單說哈@FengSufeier 的疑問,從你提到
因此估計你多是自學尚未走入正式的工做場景中吧,我能夠給你舉個例子,在咱們平常開發過程當中,好比你如今有一個系統,有一個項目工程代碼,裏面有數據庫配置,你正式上線的環境確定有一個數據庫的地址,你測試環境也會有一個數據庫的地址,兩個確定不同,否則現網數據和測試數據混在一塊兒,或者有關聯的話,測試環境數據庫被測掛了,那現網數據庫也就遭殃了,因此通常是分開的,這也就分了兩個環境,可是代碼是一份,數據庫配置是分兩份的,如何控制?
這個時候,咱們通常就是把以前的一個配置文件application.yml
分爲application-test.yml
和application-prod.yml
兩份,而這application-test.yml
和application-prod.yml
這兩個文件去配置不一樣環境的數據庫,固然這裏叫test
和prod
,你也能夠叫其餘名字,只是一個叫法,而後在啓動的時候,添加虛擬機的啓動參數(VM options
):-Dspring.profiles.active=test
,也就是告訴SpringBoot
你須要執行哪一個配置環境的配置文件
這一點在boot
的說明文檔裏有提到,同時指定環境的配置文件執行時會把application.yml
中的配置覆蓋掉
這樣也很好,好比你有3個配置文件application.yml
,application-test.yml
,application-prod.yml
,你能夠把不一樣環境的配置放入後兩個文件,可是一些公共的業務屬性配置,不區分環境的配置就能夠放到application.yml
中
以上回答了你的dev
,test
的用途,用法是什麼,總結一下
dev
,test
就是不一樣環境的名字,怎麼取看你application-{profile}.yml
的方式區分配置,而後啓動的時候添加-Dspring.profiles.active=test
來指定你要運行的環境可是說了這麼多,並無說到任何Consul Config
,對,由於本質就是兩個問題,Spring Cloud Consul Config
自己是爲了解決多系統,多應用的配置管理問題,它是統一管理配置的地方,而且能夠作到動態刷新
結合以前說到的多環境須要配置不一樣的配置文件,那既然如今要把全部配置都放到Consul Config
上作統一管理,那其實Consul Config
也要支持多環境了,因此纔有config/gateway,dev/data
這樣的寫法,只是Consul Config
的一個規定,以便支持多環境而已
至於你提到了修改爲了config/gateway,dev/data
以後的配置不起做用了,按照剛纔說的,如今配置已經在Consul Config
上了,你的config/gateway,dev/data
裏的配置就至關於之前application-dev.yml
裏的配置,按照boot
對於多環境的支持要起做用,第一你要有多環境的配置文件,你有了config/gateway,dev/data
,第二你啓動的時候加了-Dspring.profiles.active=dev
參數麼?由於你還要指定此時的運行環境,若是你不指定,那只有config/gateway/data
裏的配置會生效嘛
但願這樣的解釋對你有幫助哈~