spring cloud微服務(wù)架構(gòu)(七):分布式配置中心Spring Cloud Config——Git方式

1 原理

隨著服務(wù)越來越多泻骤,相應(yīng)的配置文件也會越來越多。我們需要將配置文件拿出來單獨管理, Spring Cloud Config對這種需求提供了支持。Spring Cloud Config分成兩個部分

  1. Config Server
  2. Config client

Config Server用來關(guān)聯(lián)外部配置降盹, 并將獲取到的配置信息提供給客戶端使用。 Config client就是我們的各個微服務(wù)應(yīng)用谤辜,我們在Config client上指定Config Server的位置蓄坏,Config client在啟動的時候就會自動去從Config Server獲取和加載配置信息。

Config Server可以從四個地方獲取配置信息丑念,分別是:

  1. git:默認(rèn)值涡戳,表示去Git倉庫讀取配置文件。
  2. subversion:表示去SVN倉庫讀取配置文件脯倚。
  3. native:將會去本地的文件系統(tǒng)中讀取配置文件妹蔽。
  4. vault:去Vault中讀取配置文件,Vault是一款資源控制工具挠将,可對資源實現(xiàn)安全訪問。
image.png

2 Config Server

創(chuàng)建一個spring boot項目编整,就叫config-server舔稀,增加spring-cloud-config-server配置文件,pom文件如下:

<dependencyManagement>
      <dependencies>
             <dependency>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-dependencies</artifactId>
                   <version>Dalston.SR3</version>
                   <type>pom</type>
                   <scope>import</scope>
             </dependency>
      </dependencies>
</dependencyManagement>

<dependencies>
      <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-config-server</artifactId>
      </dependency>
</dependencies>

編寫啟動類,并增加注解@EnableConfigServer,代碼如下:

@SpringBootApplication
@EnableConfigServer
public class ServerApp {

       public static void main(String[] args) {
             new SpringApplicationBuilder(ServerApp.class).run(args);
       }

}

本例使用git方式存儲配置文件掌测,在Git上建一個repo内贮,名稱為springcloud-learn,包括一個config文件夾汞斧,其中有四個文件夜郁,分別是:

  • app-dev.properties,內(nèi)容 feng=dev config
  • app-prod.properties粘勒,內(nèi)容 feng=prod config
  • app.properties竞端,內(nèi)容 feng=default config
  • app-test.properties,內(nèi)容 feng=test.config
image.png

配置文件如下:

server:
  port: 8888
spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/javaDuQing/springcloud-learn.git
          search-paths: config
          username: javaDuQing
          password: xxx

啟動啟動類庙睡,通過/{application}/{profile}/{label}就能訪問到我們的配置文件了事富,其中application表示配置文件的名字技俐,對應(yīng)我們上面的配置文件就是app,profile表示環(huán)境统台,我們有dev雕擂、test、prod還有默認(rèn)贱勃,label表示分支井赌,默認(rèn)我們都是放在master分支上,我們在瀏覽器上訪問結(jié)果如下:


image.png

實際上配置中心還會通過git clone命令將配置文件在本地保存了一份贵扰,這樣可以確保在git倉庫掛掉的時候我們的應(yīng)用還可以繼續(xù)運行仇穗,此時我們斷掉網(wǎng)絡(luò),再訪問http://localhost:8888/app/master拔鹰,一樣還可以拿到數(shù)據(jù)仪缸,此時的數(shù)據(jù)就是從本地獲取的。
默認(rèn)情況下列肢,Config Server 克隆下來的文件保存在C:\Users<當(dāng)前用戶>\AppData\Local\Temp目錄下恰画,

image.png

我們可以通過如下配置來修改: spring.cloud.config.server.git.basedir=E:\test\
先不要創(chuàng)建test文件夾,會自動創(chuàng)建瓷马,當(dāng)你訪問localhost:8888/app/master時拴还,會自動拷貝到本地,如下:


image.png

3 config client

其實有點感覺config server像是git和config client之間的橋梁欧聘,或者像的網(wǎng)關(guān)片林。服務(wù)都通過config server獲取到git上的配置信息。

下面創(chuàng)建一個config client項目怀骤,就叫config-client费封,pom文件如下:

<dependencyManagement>
      <dependencies>
             <dependency>
                   <groupId>org.springframework.cloud</groupId>
                   <artifactId>spring-cloud-dependencies</artifactId>
                   <version>Dalston.SR3</version>
                   <type>pom</type>
                   <scope>import</scope>
             </dependency>
      </dependencies>
</dependencyManagement>
<dependencies>
      <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
             <version>1.5.4.RELEASE</version>
      </dependency>
      <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-config</artifactId>
      </dependency>
</dependencies>

編寫啟動類如下:

@SpringBootApplication
public class ClientApp {

       public static void main(String[] args) {
             new SpringApplicationBuilder(ClientApp.class).run(args);
       }

}

編寫配置文件,uri是config-server的地址蒋伦,application.name相當(dāng)于/{application}/{profile}/{label}中的application弓摘。

server:
  port: 2008
spring:
  application:
    name: app
  cloud:
    config:
      profile: dev
      label: master
      uri: http://localhost:8888/

編寫control,如下:

public class TestController {

    @Autowired
    Environment env;

    @RequestMapping("/feng")
    public String sang() {
        return env.getProperty("feng", "未定義");
    }
}

訪問:http://localhost:2008/feng

image.png

有一點需要注意:server-client的配置名稱要是bootstrap.yml或者bootstrap.properties痕届,因為server-client讀取配置文件是通過引導(dǎo)程序來加載的韧献,而引導(dǎo)程序是加載名為bootstrap的配置文件。也就說當(dāng)在我們的spring boot項目中有一個application.yml的配置文件研叫,其實在加載application.yml文件前锤窑,會先加載名為bootstrap的配置文件。

參考

  1. 楊恩雄 《瘋狂spring cloud微服務(wù)架構(gòu)實戰(zhàn)》
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嚷炉,一起剝皮案震驚了整個濱河市渊啰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌申屹,老刑警劉巖虽抄,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件走搁,死亡現(xiàn)場離奇詭異,居然都是意外死亡迈窟,警方通過查閱死者的電腦和手機(jī)私植,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來车酣,“玉大人曲稼,你說我怎么就攤上這事『保” “怎么了贫悄?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長娘摔。 經(jīng)常有香客問我窄坦,道長,這世上最難降的妖魔是什么凳寺? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任鸭津,我火速辦了婚禮,結(jié)果婚禮上肠缨,老公的妹妹穿的比我還像新娘逆趋。我一直安慰自己,他們只是感情好晒奕,可當(dāng)我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布闻书。 她就那樣靜靜地躺著,像睡著了一般脑慧。 火紅的嫁衣襯著肌膚如雪魄眉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天闷袒,我揣著相機(jī)與錄音坑律,去河邊找鬼。 笑死霜运,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蒋腮。 我是一名探鬼主播淘捡,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼池摧!你這毒婦竟也來了焦除?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤作彤,失蹤者是張志新(化名)和其女友劉穎膘魄,沒想到半個月后乌逐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡创葡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年浙踢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灿渴。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡洛波,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出骚露,到底是詐尸還是另有隱情蹬挤,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布棘幸,位于F島的核電站焰扳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏误续。R本人自食惡果不足惜吨悍,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望女嘲。 院中可真熱鬧畜份,春花似錦、人聲如沸欣尼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽愕鼓。三九已至钙态,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間菇晃,已是汗流浹背册倒。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留磺送,地道東北人驻子。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像估灿,于是被迫代替她去往敵國和親崇呵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,592評論 2 353

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