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

10.1、Spring Cloud Config簡介

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

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

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

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


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

10.2、快速入門-搭建Config Server

10.2.1、準(zhǔn)備3個配置文件,推送git服務(wù)器

準(zhǔn)備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服務(wù)器,這里使用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}是指分支,默認(rèn)是master。

10.3、快速入門-搭建Config Client

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

10.3.1、導(dǎo)入依賴
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>
10.3.2、創(chuàng)建配置文件boostrap.properties
 #對應(yīng)的配置服務(wù)中的引用名稱
spring.cloud.config.name=demo
#對應(yīng)配置服務(wù)地址
spring.cloud.config.uri=http://127.0.0.1:9999
# 對應(yīng)配置服務(wù)中的{perfile}
spring.cloud.config.profile=dev
#對應(yīng)分支
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、編寫測試方法進(jìn)行測試

再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安全認(rèn)證
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服務(wù)器提供了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服務(wù)中,默認(rèn)為true
eureka.client.register-with-eureka=true
#是否從Eureka中獲取信息
eureka.client.fetch-registry=true
#Eureka服務(wù)端與Eureka客戶端交互地址
eureka.client.serviceUrl.defaultZone=http://zuo:123456@127.0.0.1:8888/eureka/
10.6.3、再啟動類中增加注解@EnableDiscoveryClient注解
啟動類
10.6.4、重新啟動
重新啟動

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

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

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

10.6.6、測試
測試

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

demo源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容