Spring Cloud—十忿偷、使用Spring Cloud Config統(tǒng)一管理微服務

10.1寇壳、Spring Cloud Config簡介

Spring Cloud Config為分布式系統(tǒng)外部化配置提供了服務器和客戶端的支持添坊,它包括Config Server和Config Client兩部分太伊。由于Config Server和Config Client都實現(xiàn)了對Spring Environment和PropertySource抽象的映射雇锡,因此,Spring Cloud Config非常合適Spring應用程序僚焦,當然也可與任何其他語言編寫的應用程序配合使用锰提。

Config Server是一個可橫向擴展、集中式的配置服務器芳悲,它用于集中管理應用程序各個環(huán)境下的配置立肘,默認使用Git存儲配置文件內(nèi)容,也可以使用SVN存儲名扛,或者是本地文件存儲谅年。

Config Client是Config Server的客戶端,用于操作存儲在Config Server中的配置內(nèi)容肮韧。微服務在啟動時會請求Config Server獲取配置文件的內(nèi)容融蹂,請求到后再啟動容器。

使用Spring Cloud Config的架構(gòu):


Spring Cloud Config架構(gòu).png

10.2弄企、快速入門-搭建Config Server

10.2.1殿较、準備3個配置文件,推送git服務器

準備3個文件:

  • demo-dev.properties
  • demo-production.properties
  • demo-test.properties
    該文件的命名規(guī)則是:{application}-{profile}.properties
    其內(nèi)容是(另外2個文件內(nèi)容稍有不同即可):
 jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/demo?userUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root

推送到git服務器桩蓉,這里使用github淋纲。


github.png
10.2.2、創(chuàng)建工程springcloud-demo-config

pom依賴

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>
10.2.3院究、再啟動類上增加注解@EnableConfigServer
@EnableConfigServer.png
10.2.4洽瞬、編寫application.properties
 server.port=9999
spring.application.name=springcloud-demo-config
spring.cloud.config.server.git.uri=https://github.com/zuoqiyin/spring-cloud-config.git
spring.cloud.config.server.git.username=zuoqiyin@foxmail.com
spring.cloud.config.server.git.password=*****
10.2.5、啟動測試
測試.png

測試已經(jīng)看到配置文件的內(nèi)容业汰。

請求配置文件的規(guī)則如下:
/{application}/{profile}/[label]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
其中{label}是指分支伙窃,默認是master。

10.3样漆、快速入門-搭建Config Client

我們再springclouf-demo-item項目中添加Config Client的支持为障。來讀取JDBC的配置文件的內(nèi)容。

10.3.1放祟、導入依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
10.3.2鳍怨、創(chuàng)建配置文件boostrap.properties
 #對應的配置服務中的引用名稱
spring.cloud.config.name=demo
#對應配置服務地址
spring.cloud.config.uri=http://127.0.0.1:9999
# 對應配置服務中的{perfile}
spring.cloud.config.profile=dev
#對應分支
spring.cloud.config.label=master
10.3.3、編寫JdbcConfigBean
package cn.zuoqy.springclouddemoitem.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/**
* Created by zuoqy on 14:18 2018/11/22.
*/
@Component // 加入到Spring容器
public class JdbcConfigBean {

    @Value("${jdbc.url}")
    private String url;

    @Value("${jdbc.username}")
    private String username;

    @Value("${jdbc.password}")
    private String password;

    @Value("${jdbv.driverClassName}")
    private String driverClassName;

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getDriverClassName() {
        return driverClassName;
    }

    public void setDriverClassName(String driverClassName) {
        this.driverClassName = driverClassName;
    }

    @Override
    public String toString() {
        return "JdbcConfigBean{" +
            "url='" + url + '\'' +
            ", username='" + username + '\'' +
            ", password='" + password + '\'' +
            ", driverClassName='" + driverClassName + '\'' +
            '}';
    }
}
10.3.4跪妥、編寫測試方法進行測試

再ItemController中編寫test方法

@Autowired
private JdbcConfigBean jdbcConfigBean;

@GetMapping(value = "test")
public String test() {
    return this.jdbcConfigBean.toString();
}
10.3.5鞋喇、啟動測試
測試.png

測試結(jié)果顯示已經(jīng)從Config Server中獲取到配置文件的內(nèi)容。

10.4眉撵、手動更新運行中的配置文件

10.4.1侦香、再springcloud-demo-item項目中加入依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
10.4.2落塑、為JdbcConfigBean添加@RefreshScope
@RefreshScope.png
10.4.3饱须、再application.properties加上
#是否開啟actuator安全認證
management.security.enabled=false
10.4.4厌衙、post請求/refresh來更新配置內(nèi)容:
post請求.png
10.4.5赠橙、測試結(jié)果
測試結(jié)果.png

發(fā)現(xiàn)可以更新配置信息散吵。

10.5缠沈、借助與git的webhook(web鉤子)實現(xiàn)自動跟新

github等git服務器提供了web hook功能:再倉庫中的資源發(fā)生更新時會通知給誰,這里的誰是一個url地址错蝴。


git

git

添加完成接下來測試發(fā)現(xiàn),配置文件內(nèi)容會動態(tài)更到Bean中颓芭。


架構(gòu)圖

10.6顷锰、Config Client配置的優(yōu)化

10.6.1、再springcloud-demo-config中添加Eureka的依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka-server</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-xml</artifactId>
        </exclusion>
    </exclusions>
</dependency>
10.6.2亡问、再application.properties文件中增加
#是否將自己注冊到Eureka服務中,默認為true
eureka.client.register-with-eureka=true
#是否從Eureka中獲取信息
eureka.client.fetch-registry=true
#Eureka服務端與Eureka客戶端交互地址
eureka.client.serviceUrl.defaultZone=http://zuo:123456@127.0.0.1:8888/eureka/
10.6.3官紫、再啟動類中增加注解@EnableDiscoveryClient注解
啟動類
10.6.4、重新啟動
重新啟動

可以看到再Eureka中已經(jīng)又配置中心得服務

10.6.5州藕、再springcloud-demo-item中修改bootstrap.properties配置
bootstrap.png

這里配置Eureka信息束世,因為Spring boot中bootstrap再application之前加載。

10.6.6床玻、測試
測試

Spring Cloud—一毁涉、微服務架構(gòu)
Spring Cloud—二、Spring Cloud簡介
Spring Cloud—三锈死、使用Spring Cloud實現(xiàn)微服務
Spring Cloud—四贫堰、Spring Cloud快速入門
Spring Cloud—五、注冊中心Eureka
Spring Cloud—六待牵、使用Ribbon實現(xiàn)負載均衡
Spring Cloud—七其屏、容錯保護:Hystrix
Spring Cloud—八、使用Feign實現(xiàn)聲明式的Rest調(diào)用
Spring Cloud—九缨该、服務網(wǎng)關(guān)Spring Cloud Zuul
Spring Cloud—十偎行、使用Spring Cloud Config統(tǒng)一管理微服務
Spring Cloud—十一、使用Spring Cloud Bus(消息總線)實現(xiàn)自動更新

demo源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贰拿,一起剝皮案震驚了整個濱河市蛤袒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌膨更,老刑警劉巖汗盘,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異询一,居然都是意外死亡隐孽,警方通過查閱死者的電腦和手機癌椿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來菱阵,“玉大人踢俄,你說我怎么就攤上這事∏缂埃” “怎么了都办?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長虑稼。 經(jīng)常有香客問我琳钉,道長,這世上最難降的妖魔是什么蛛倦? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任歌懒,我火速辦了婚禮,結(jié)果婚禮上溯壶,老公的妹妹穿的比我還像新娘及皂。我一直安慰自己,他們只是感情好且改,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布验烧。 她就那樣靜靜地躺著,像睡著了一般又跛。 火紅的嫁衣襯著肌膚如雪碍拆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天慨蓝,我揣著相機與錄音倔监,去河邊找鬼。 笑死菌仁,一個胖子當著我的面吹牛浩习,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播济丘,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谱秽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了摹迷?” 一聲冷哼從身側(cè)響起疟赊,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎峡碉,沒想到半個月后近哟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡鲫寄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年吉执,在試婚紗的時候發(fā)現(xiàn)自己被綠了疯淫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡戳玫,死狀恐怖熙掺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情咕宿,我是刑警寧澤币绩,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站府阀,受9級特大地震影響缆镣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜试浙,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一董瞻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧川队,春花似錦、人聲如沸睬澡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽煞聪。三九已至斗躏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間昔脯,已是汗流浹背啄糙。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留云稚,地道東北人隧饼。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像静陈,于是被迫代替她去往敵國和親燕雁。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

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