SpringCloud 基礎(chǔ)教程(四)-配置中心入門

? ?我的博客:蘭陵笑笑生,歡迎瀏覽博客闸准!

? ?上一章 SpringCloud基礎(chǔ)教程(三)-Eureka進(jìn)階當(dāng)中,我們?cè)趯?duì)Eureka的有了基本的基礎(chǔ)認(rèn)識(shí)之上辆童,深入的了解Eureka高可用集群和其他的生產(chǎn)環(huán)境中用到的一些配置凿可。本章將開(kāi)始了解分布式環(huán)境下的配置中心敛瓷。

前言

?為什么需要配置中心材失,在單體的應(yīng)用中蓝丙,配置文件就可以很好的解決配置問(wèn)題。但是在微服務(wù)架構(gòu)模式下疲憋,系統(tǒng)不可避免的被拆分了許多個(gè)微服務(wù)組件,如果還是通過(guò)以前的方式梁只,配置的工作量會(huì)很大缚柳。為此埃脏,一個(gè)通用的分布式的配置管理中心是必不可少的彩掐。Spring Cloud提供了另外一個(gè)組件Spring Cloud Config。

?Spring Cloud Config提供了服務(wù)端和客戶端的支持堵幽,基于Spring環(huán)境,能夠無(wú)縫的集成Spring朴下,默認(rèn)的實(shí)現(xiàn)是基于Git倉(cāng)庫(kù)苦蒿。當(dāng)然也支持SVN,本地文件等佩迟,甚至自定義實(shí)現(xiàn)。

一 报强、快速構(gòu)建Config Server配置服務(wù)端

?這里我們使用Git作為配置文件的存儲(chǔ)倉(cāng)庫(kù),首先建立Maven項(xiàng)目秉溉,并在Pom.xml文件中引入相關(guān)依賴力惯。

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

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

?創(chuàng)建ConfigServerApplicaition.java 類,使用@EnableConfigServer注解坚嗜,表示允許該服務(wù)以HTTP形式對(duì)外提供配置管理服務(wù):

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplicaition {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplicaition.class, args);
    }
}

?添加applicaiton.yml,配置如下:

spring:
  application:
    name: single
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/lnxxs/springCloudConfig.git
          password:
          username:
          search-paths: conf
      label: master
  • spring.cloud.config.server.git.uri:配置Git的倉(cāng)庫(kù)位置夯膀。
  • spring.cloud.config.server.git.search-paths:配置Git的倉(cāng)庫(kù)路徑下的相對(duì)搜索位置。
  • spring.cloud.config.server.git.username:Git的用戶名苍蔬,如果倉(cāng)庫(kù)是公開(kāi)的可以不填
  • spring.cloud.config.server.git.password:配置Git用戶密碼诱建。
  • spring.cloud.config.lable:git的分支名稱

?在這之前,事先創(chuàng)建Git倉(cāng)庫(kù)碟绑,添加配置文件俺猿,master分支添加如下文件和內(nèi)容:

ConfigServer.properties:       k1=master-default-v1

ConfigServer-dev.properties:k1=master-dev-v1

ConfigServer-test.properties:k1=master-test-v1

ConfigServer-pro.properties:k1=master-pro-v1

?在服務(wù)啟動(dòng)后刀脏,可以基于HTTP請(qǐng)求訪問(wèn)如下的URL進(jìn)行配置信息的獲取啸罢,獲取的格式有如下幾種:

  • /{application}/{profile}
  • /{application}/{profile}[/{lable}]
  • /{application}-{profile}.properties
  • /{lable}/{application}-{profile}.properties
  • /{lable}/{application}/{profile}[/{lable}

其中applicaiton是文件的名稱。如

1) http://localhost:6001/ConfigServer-dev.properties

file

2) http://localhost:6001/master/ConfigServer-dev.properties :加載指定分支的屬性:

file

3) http://localhost:6001/ConfigServer/default :顯示默認(rèn)的配置

{
    "name":"ConfigServer",
    "profiles":[
        "default"
    ],
    "label":null,
    "version":"f516174f308769468f1ac683cfeffa803a63c9af",
    "state":null,
    "propertySources":[
        {
            "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer.properties",
            "source":{
                "k1":"master-default-v1"
            }
        }
    ]
}

4) http://localhost:6001/ConfigServer/dev :顯示默認(rèn)和dev的信息

{
    "name":"ConfigServer",
    "profiles":[
        "dev"
    ],
    "label":null,
    "version":"f516174f308769468f1ac683cfeffa803a63c9af",
    "state":null,
    "propertySources":[
        {
            "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer-dev.properties",
            "source":{
                "k1":"master-dev-v1"
            }
        },
        {
            "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer.properties",
            "source":{
                "k1":"master-default-v1"
            }
        }
    ]
}

5) http://localhost:6001/ConfigServer/test/master 顯示指定的分支的test和默認(rèn)的配置

{
    "name":"ConfigServer",
    "profiles":[
        "test"
    ],
    "label":"master",
    "version":"f516174f308769468f1ac683cfeffa803a63c9af",
    "state":null,
    "propertySources":[
        {
            "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer-test.properties",
            "source":{
                "k1":"master-test-v1"
            }
        },
        {
            "name":"https://gitee.com/lnxxs/springCloudConfig.git/ConfigServer.properties",
            "source":{
                "k1":"master-default-v1"
            }
        }
    ]
}

?如果通過(guò)以上的URL獲取到Git倉(cāng)庫(kù)的配置信息耕皮,說(shuō)明配置服務(wù)端正常凯肋。

二 谊惭、構(gòu)建Config Client配置客戶端

?接下來(lái)我們創(chuàng)建一個(gè)SpringBoot應(yīng)用作為客戶端來(lái)讀取Config Server中提供的配置。(我們開(kāi)發(fā)的任何一個(gè)微服務(wù)組件都可以認(rèn)為是一個(gè)Config Client客戶端。)

?新建ConfigClientApplication,java啟動(dòng)類圈盔,并在項(xiàng)目文件pom.xml中添加依賴:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--web依賴-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>

?添加bootstrap.yml,注意這些配置必須是在bootstrap.yml中豹芯,配置才能生效,如果配置在applicaiton.yml中是沒(méi)有任何效果的驱敲。

spring:
  application:
    name: server-client
  cloud:
    config:
        label: master
        name: ConfigServer
        profile: test
        uri: http://localhost:6001/
        

  • spring.cloud.config.label:指定分支
  • spring.cloud.config.name:指定配置文件的名稱铁蹈,我的git倉(cāng)庫(kù)的配置文件的名稱為ConfigServer
  • spring.cloud.config.profile:指定激活那個(gè)配置文件
  • spring.cloud.config.uri:指定配置中心的url,所有的配置信息都是從配置中心獲取众眨。

?創(chuàng)建ConfigClientApplication.java啟動(dòng)類握牧,并添加EnableAutoConfiguration注解,表示自動(dòng)獲取項(xiàng)目中的配置變量娩梨。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@EnableAutoConfiguration
public class ConfigClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }
}

?創(chuàng)建控制器,測(cè)試獲取配置信息:

@RestController
public class ValueController {
    @Value("${k1}")
     String value;
    @GetMapping("/get")
    public String getValue(){
        return value;
    }
}

?調(diào)用接口測(cè)試矫俺,正確的獲取到了配置中心的信息:

file

三厘托、其他配置

3.1 客戶端快速失敗

?在無(wú)法連接Config Server的時(shí)候铅匹,我們有時(shí)候要求客戶端需要啟動(dòng)失敗包斑,我們可以通過(guò)配置bootstrap配置項(xiàng):

spring:
  cloud:
    config:
        fail-fast: true
        retry:
          initial-interval: 1000
          max-attempts: 6
          max-interval: 2000
          multiplier: 1.1

3.2 客戶端重試

?如果我們要求客戶端組件在Config Server不可用是罗丰,讓客戶端重試萌抵,那么我們也可以通過(guò)設(shè)置:

spring:
  cloud:
    config:
        fail-fast: false

?同時(shí)在客戶端的配置文件中引入spring-retry和aop依賴:

         <dependency>
            <groupId>org.springframework.retry</groupId>
            <artifactId>spring-retry</artifactId>
            <version>1.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

3.3 HTTP權(quán)限

?如果需要對(duì)Config Server的http請(qǐng)求進(jìn)行賬號(hào)密碼控制,在服務(wù)端配置:

spring:
  application:
    name: single
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/lnxxs/springCloudConfig.git
          password:
          username:
          search-paths: conf
      label: master
      username: 
      password: 
      uri: http://localhost:6001/
      enabled: true
  security:
    user:
      name: user
      password: pwd

?注意用戶名讨永、密碼的屬性是spring.security.user.name和spring.security.user.password

spring.cloud.config.username和spring.cloud.config.password服務(wù)端配置是沒(méi)有什么作用卿闹,是客戶端用來(lái)配置用的

?并在服務(wù)端的pom文件中引入security依賴:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>

?我們只需要將用戶名和密鑰復(fù)制并配置再每個(gè)客戶端中bootstrap.xml中就可以,客戶端是不需要引入security依賴的插佛。

spring:
  application:
    name: server-client
  cloud:
    config:
        label: master
        profile: test
        uri: http://localhost:6001/
        name: ConfigServer
        username: user
        password: pwd


?在配置HTTP權(quán)限的時(shí)候量窘,如果服務(wù)端在引入security之后蚌铜,沒(méi)有配置用戶名和密碼冬殃,那么服務(wù)端項(xiàng)目啟動(dòng)時(shí)审葬,就會(huì)隨機(jī)生成一個(gè)全局的密鑰涣觉。這里我們不使用隨機(jī)的密碼血柳。如果配置了用戶名和密碼难捌,那么客戶端必須同時(shí)配置一樣的用戶名和加密的密鑰员淫。

四击敌、總結(jié):

?這一篇文章簡(jiǎn)單的介紹了Spring Cloud ConfIf組件的使用愚争,并結(jié)合git倉(cāng)庫(kù)搭建了分布式配置中心轰枝,實(shí)現(xiàn)了程序和配置的隔離,解耦編碼與環(huán)境之間的耦合步淹,這是非常重要的缭裆,當(dāng)然這樣的配置還是存在確定澈驼,在實(shí)際的生成環(huán)境中,所有的服務(wù)配置都依賴于配置中心挎塌,那么如果配置中心出現(xiàn)宕機(jī)該怎么辦榴都,下一章我們將繼續(xù)了解分布式配置中心的集群搭建.

?以上就是本期的分享嘴高,你可以關(guān)注本博客的#Spring Cloud基礎(chǔ)教程!#

? 還可以關(guān)注公眾號(hào): 程序員笑笑生拴驮,關(guān)注更多精彩內(nèi)容莹汤!

  • file

本文由博客一文多發(fā)平臺(tái) OpenWrite 發(fā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末止潮,一起剝皮案震驚了整個(gè)濱河市喇闸,隨后出現(xiàn)的幾起案子询件,更是在濱河造成了極大的恐慌刻蟹,老刑警劉巖嘿辟,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異淀衣,居然都是意外死亡召调,警方通過(guò)查閱死者的電腦和手機(jī)国撵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)澳厢,“玉大人剩拢,你說(shuō)我怎么就攤上這事徐伐“焖兀” “怎么了性穿?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)祈远。 經(jīng)常有香客問(wèn)我谋减,道長(zhǎng)逃顶,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮盈蛮,結(jié)果婚禮上殊轴,老公的妹妹穿的比我還像新娘袒炉。我一直安慰自己旁理,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布我磁。 她就那樣靜靜地躺著孽文,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夺艰。 梳的紋絲不亂的頭發(fā)上芋哭,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音郁副,去河邊找鬼减牺。 笑死,一個(gè)胖子當(dāng)著我的面吹牛存谎,可吹牛的內(nèi)容都是我干的拔疚。 我是一名探鬼主播墩虹,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼菌湃,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤站故,失蹤者是張志新(化名)和其女友劉穎朗兵,沒(méi)想到半個(gè)月后盐欺,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體粉洼,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年裸燎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喇潘,死狀恐怖忱屑,靈堂內(nèi)的尸體忽然破棺而出从铲,到底是詐尸還是另有隱情吉嫩,我是刑警寧澤脐彩,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布嗅回,位于F島的核電站,受9級(jí)特大地震影響定续,放射性物質(zhì)發(fā)生泄漏恩掷。R本人自食惡果不足惜供嚎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一着帽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧越平,春花似錦尼变、人聲如沸牌借。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至嚎研,卻和暖如春蓖墅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工置媳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留于樟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓拇囊,卻偏偏與公主長(zhǎng)得像迂曲,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子寥袭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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