Spring Cloud(二)配置中心

Spring Cloud Config

Spring Cloud Config是Spring Cloud團(tuán)隊創(chuàng)建的一個項目卸留,用來為分布式系統(tǒng)中的基礎(chǔ)設(shè)施和微服務(wù)應(yīng)用提供集中化的外部配置支持,它分為服務(wù)端與客戶端兩個部分咆课。
其中服務(wù)端也稱為分布式配置中心慎菲,它是一個獨(dú)立的微服務(wù)應(yīng)用爸吮,用來連接配置倉庫并為客戶端提供獲取配置信息钙态、加密/解密信息等訪問接口述呐;
而客戶端則是微服務(wù)架構(gòu)中的各個微服務(wù)應(yīng)用或基礎(chǔ)設(shè)施寺惫,它們通過指定的配置中心來管理應(yīng)用資源與業(yè)務(wù)相關(guān)的配置內(nèi)容疹吃,并在啟動的時候從配置中心獲取和加載配置信息。
Spring Cloud Config實(shí)現(xiàn)了對服務(wù)端和客戶端中環(huán)境變量和屬性配置的抽象映射西雀,所以它除了適用于Spring構(gòu)建的應(yīng)用程序之外萨驶,也可以在任何其他語言運(yùn)行的應(yīng)用程序中使用。
由于Spring Cloud Config實(shí)現(xiàn)的配置中心默認(rèn)采用Git來存儲配置信息蒋搜,所以使用Spring Cloud Config構(gòu)建的配置服務(wù)器篡撵,天然就支持對微服務(wù)應(yīng)用配置信息的版本管理,并且可以通過Git客戶端工具來方便的管理和訪問配置內(nèi)容豆挽。
當(dāng)然它也提供了對其他存儲方式的支持育谬,比如:SVN倉庫、本地化文件系統(tǒng)帮哈。

由于SpringCloud在Edgware之后的版本新增的一種配置方式:采用數(shù)據(jù)庫存儲配置信息膛檀。
我們的demo版本使用的是Edgware.SR5版本,利用Git進(jìn)行配置中心的管理一直都飽受爭議,所以我在這邊只進(jìn)行了數(shù)據(jù)庫存儲方式的介紹咖刃。


構(gòu)建一個配置中心的服務(wù)端

在pom文件中引入以下幾個主要依賴:

  • spring-cloud-config-server:配置中心的主要依賴
  • spring-cloud-starter-eureka-server:將服務(wù)注冊至eureka注冊中心
  • spring-boot-starter-jdbc:因?yàn)槭褂玫氖菙?shù)據(jù)庫存儲泳炉,所以必須引入jdbc的依賴
  • mysql-connector-java:MySQL數(shù)據(jù)庫的連接包
  • flyway-core:主要用來管理schema,具體介紹可以看flyway講解
    <parent>
        <groupId>com.wkedong.springcloud</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>

    <dependencies>
        <!-- spring-cloud-config-server -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <!-- spring-cloud-starter-eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.21</version>
        </dependency>
        <dependency>
            <groupId>org.flywaydb</groupId>
            <artifactId>flyway-core</artifactId>
            <version>5.0.3</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

準(zhǔn)備schema創(chuàng)建文件嚎杨。在resources下創(chuàng)建schema目錄花鹅,并加入V1.0__Base_version.sql文件,具體內(nèi)容如下:

DROP TABLE IF EXISTS properties;
CREATE TABLE `properties` (
  `id`          int(11) AUTO_INCREMENT
  COMMENT '主鍵'
    PRIMARY KEY,
  `key`         varchar(50)  NOT NULL
  COMMENT 'key值_屬性名',
  `value`       varchar(500) NOT NULL
  COMMENT 'value值_屬性值',
  `application` varchar(50)  NOT NULL
  COMMENT '應(yīng)用名',
  `profile`     varchar(50)  NOT NULL
  COMMENT '激活的剖面',
  `label`       varchar(50)  NOT NULL
  COMMENT '資源的label'
)
  ENGINE = InnoDB
  DEFAULT CHARSET = utf8;

V1.1__Update_version.sql:

INSERT INTO properties VALUES(1, 'name', 'test-dev-master', 'service-producer', 'dev', 'master');
INSERT INTO properties VALUES(2, 'name', 'test-pro-master', 'service-producer', 'pro', 'master');
INSERT INTO properties VALUES (3, 'name', 'test-dev-develop', 'service-producer', 'dev', 'develop');
INSERT INTO properties VALUES (4, 'name', 'test-pro-develop', 'service-producer', 'pro', 'develop');
INSERT INTO properties VALUES(5, 'name', 'test-dev-master', 'service-consumer', 'dev', 'master');
INSERT INTO properties VALUES(6, 'name', 'test-pro-master', 'service-consumer', 'pro', 'master');
INSERT INTO properties VALUES (7, 'name', 'test-dev-develop', 'service-consumer', 'dev', 'develop');
INSERT INTO properties VALUES (8, 'name', 'test-pro-develop', 'service-consumer', 'pro', 'develop');

該sql文件會由flyway自動運(yùn)行

對工程做一些配置文件的操作application.yml:

eureka:
  client:
    healthcheck:
      enabled: true #健康檢查開啟
    service-url:
      defaultZone: http://localhost:6060/eureka/
server:
  port: 6010
spring:
  application:
    name: config
  #  cloud:
  #    config:
  #      server:
  #        git:
  #          uri: https://github.com/wkedong/Spring-Cloud-Config.git
  profiles:
    active: jdbc
  cloud:
    config:
      server:
        jdbc:
          sql: SELECT `KEY`, `VALUE` from PROPERTIES where APPLICATION=? and PROFILE=? and LABEL=?
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/spring_cloud_config?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
flyway:
  locations: /schema
  baseline-on-migrate: true

創(chuàng)建應(yīng)用主類枫浙,具體內(nèi)容如下:

/**
 * @author wkedong
 */
@EnableDiscoveryClient
@EnableConfigServer
@SpringBootApplication
public class ConfigApplication {

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

服務(wù)端配置驗(yàn)證

完成以上的工程搭建之后刨肃,我們就可以驗(yàn)證配置中心的設(shè)置。
首先啟動配置中心應(yīng)用箩帚,然后訪問 http://localhost:6010/service-producer/dev/develop真友,來獲取service-producer服務(wù)的dev環(huán)境下develop分支的配置文件,結(jié)果如下:

<Environment>
    <name>service-producer</name>
    <profiles>
        <profiles>dev</profiles>
    </profiles>
    <label>develop</label>
    <version/>
    <state/>
    <propertySources>
        <propertySources>
            <name>service-producer-dev</name>
            <source>
                <name>test-dev-develop</name>
            </source>
        </propertySources>
    </propertySources>
</Environment>

至此紧帕,SpringCloud的配置中心的數(shù)據(jù)庫存儲方式就搭建完成了盔然,后續(xù)demo會介紹如何在各個微服務(wù)中去獲取配置中心的配置進(jìn)行操作。

注意事項:后續(xù)所有需要加載配置中心配置的工程所對應(yīng)的工程配置文件都必須在bootstrap.yml中配置配置中心信息是嗜,否則會加載失敗愈案。如果在application.yml中配置,在啟動工程時候會發(fā)現(xiàn)鹅搪,配置中心的地址端口號為8888而不是你配置的刻帚。


文章目錄:

整體demo的GitHub地址:Spring-Cloud

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市涩嚣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掂僵,老刑警劉巖航厚,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锰蓬,居然都是意外死亡幔睬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門芹扭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來麻顶,“玉大人,你說我怎么就攤上這事舱卡「ㄉ觯” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵轮锥,是天一觀的道長矫钓。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么新娜? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任赵辕,我火速辦了婚禮,結(jié)果婚禮上概龄,老公的妹妹穿的比我還像新娘还惠。我一直安慰自己,他們只是感情好私杜,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布蚕键。 她就那樣靜靜地躺著,像睡著了一般歪今。 火紅的嫁衣襯著肌膚如雪嚎幸。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天寄猩,我揣著相機(jī)與錄音嫉晶,去河邊找鬼。 笑死田篇,一個胖子當(dāng)著我的面吹牛替废,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播泊柬,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼椎镣,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了兽赁?” 一聲冷哼從身側(cè)響起状答,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎刀崖,沒想到半個月后惊科,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡亮钦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年馆截,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜂莉。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蜡娶,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出映穗,到底是詐尸還是另有隱情窖张,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布男公,位于F島的核電站荤堪,受9級特大地震影響合陵,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜澄阳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一拥知、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碎赢,春花似錦低剔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至枕赵,卻和暖如春猜欺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拷窜。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工开皿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人篮昧。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓赋荆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親懊昨。 傳聞我的和親對象是個殘疾皇子窄潭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

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