Spring Cloud Config 學習(二)

《Spring Cloud與Docker 微服務架構實戰》學習筆記git

Config Client

在上篇文章中,咱們已經編寫好了 Config Server 那個客戶端是如何訪問 Config Server 而且獲取到對應的配置呢?
下面咱們就來了解一下github

集成

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

在application.properties中配置一下端口:spring

server.port=8081

建立配置文件bootstrap.yml,而後在其中添加一下內容bootstrap

spring:
  application:
    # 對應Config Server 中的{application}
    name: microservice-foo
  cloud:
    config:
      # Config Server地址
      uri: http://localhost:8080/
      # profile 對應 Config Server 中的{profile}
      profile: dev
      # label 對應 Config Server 中的{label} Git分支
      label: master

這裏只能使用指定的配置配置文件名稱,使用其餘的文件名稱無效服務器

按照書中的說法,Spring Cloud 中有"引導上下文"的概念,這是主應用程序的父上下文。引導上下文負責從配置服務器加載配置屬性,以及解密外部配置文件中的屬性。架構

和主應用程序加載application.*(yml或properties)中的屬性不一樣,引導上下文加載bootstrap.*中的屬性。配置在bootstrap.*中的屬性有更高的優先級,所以默認狀況下他們不能被本地
配置覆蓋app

按照個人理解,簡單點來講bootstrap.* 就像是 application.* 的父類,可是有一點不一樣的是,bootstrap中的屬性不會被application.*中的屬性所覆蓋dom

只須要這樣簡單的配置,就已經能夠從Config Service 中拉取屬性了ide

驗證

驗證一下微服務

@RestController
public class ConfigClientController {

    @Value("${profile}")
    private String profile;

    @GetMapping("/profile")
    public String hello() {
        return this.profile;
    }

}

啓動 Config Service 啓動 Config Client,訪問
http://localhost:8081/profile ,顯示:

clipboard.png

Config Server的Git 倉庫配置

佔位符支持

Config Service 的佔位符支持{application}、{profile} 和 {label}

例如修改原來的Config Service的配置:

spring.application.name=microservice-config-server

# 這個uri使用能夠clone的路徑
spring.cloud.config.server.git.uri=https://github.com/wkkdhr/{application}.git

# github的帳號密碼
spring.cloud.config.server.git.username=***
spring.cloud.config.server.git.password=***

在Git上新增配置文件Dome1-dev.properties內容以下:

profile=dome1-dev-1.0

而後訪問 http://localhost:8080/Dome1-dev.properties 便可獲得以下結果:

profile: dome1-dev-1.0

書中說這樣能夠支持一個應用一個Git倉庫。看到這裏應該明白了,書中所說的佔位符{application}、{profile} 和 {label} 指的是訪問url中的對應的內容。例如訪問路徑是 http://localhost:8080/Dome1-dev.properties 時,其中 Dome1 就是{application},dev 就是 {profile} ,{label} 被省略,默認 master。按照配置文件中的配置https://github.com/wkkdhr/{application}.git 系統就會去 https://github.com/wkkdhr/Dom... 這個Git倉庫中,找到 Dome1-dev.properties 這個配置文件。

匹配模式

配置模式就是經過匹配要訪問的配置文件名稱,來訪問不一樣的git倉庫。若是沒有符合的,就會訪問spring.cloud.config.server.git.uri所定義的倉庫

配置模式是{application}/{profile}。多個匹配規則用逗號,分隔

例如:

spring.cloud.config.server.git.uri=https://github.com/wkkdhr/Dome1.git

spring.cloud.config.server.git.repos.test.pattern=test*/dev*
spring.cloud.config.server.git.repos.test.uri=https://github.com/wkkdhr/configTest.git

就以上面配置爲例子,其中repos.test.pattern中的test能夠是名稱能夠本身起。test*/dev*是匹配規則,意思是配置{application}以test開頭而且{profile}以dev開頭的。若是符合匹配規則就回去訪問https://github.com/wkkdhr/configTest.git這個倉庫。

http://localhost:8080/test-dev.properties 這裏路徑,{application}是test,{profile}是dev,符合上面所定義的規則,因此就會去訪問spring.cloud.config.server.git.repos.test.uri所定義的倉庫。

若是是 http://localhost:8080/test-d1.properties 這個。它就是不符合規則的,就會去訪問https://github.com/wkkdhr/Dome1.git 這個倉庫。


spring.cloud.config.server.git.repos.simple=https://github.com/wkkdhr/simple.git

若是像上面那樣配置,就只會匹配以test開頭的配置文件。


同時這個目標地址還能夠配置成本地的路徑:

spring.cloud.config.server.git.repos.local.pattern=test*
spring.cloud.config.server.git.repos.local.uri=file:/D:\\project\\demo\\github\\configTest

搜索目錄

這個就比較見到了,就是能夠去搜索目標Git倉庫的子目錄。若是是子目錄的子目錄,須要填寫路徑

spring.cloud.config.server.git.uri=https://github.com/wkkdhr/Dome1.git
spring.cloud.config.server.git.search-paths=test1,test1*,file/test1,file/test*

啓動時加載配置文件

spring.cloud.config.server.git.clone-on-start=true

經過配置clone-on-start來讓Config Service啓動時就clone指定的Git倉庫

或者是給指定Git倉庫單獨配置:

spring.cloud.config.server.git.repos.test.uri=https://github.com/wkkdhr/configTest.git
spring.cloud.config.server.git.repos.test.clone-on-start=true

如下配置能夠打印相關日誌,可是也會同時打印許多不相關的配置信息,自行斟酌。

logging.level.org.springframework.cloud=debug
logging.level.org.springframework.boot=debug

Config Service 健康監控

Config Service 集成了 Actuator。能夠經過訪問 health的端口來查詢當前的健康狀態。

# 配置來讓health顯示詳細信息
management.endpoint.health.show-details=always

書中說,默認狀況下,健康指示器向EnvironmentRepository請求的{application}是app,{profile}和{lable}是對應的EnvironmentRepository 實現的默認值。對於Git,{profile} 是 default,{ablel}是master.
可是我在配置倉庫並無相應的配置文件,結果仍舊顯示UP。沒有深究。

能夠經過配置去檢查指定的配置文件:

spring.cloud.config.server.health.repositories.test.name=test
spring.cloud.config.server.health.repositories.test.label=master
spring.cloud.config.server.health.repositories.test.profiles=dev

訪問 http://localhost:8080/actuator/health 結果以下:

{
    "status": "UP",
    "details": {
        "diskSpace": {
            "status": "UP",
            "details": {
                "total": 214752784384,
                "free": 135328772096,
                "threshold": 10485760
            }
        },
        "refreshScope": {
            "status": "UP"
        },
        "configServer": {
            "status": "UP",
            "details": {
                "repositories": [
                    {
                        "name": "test",
                        "profiles": [
                            "dev"
                        ],
                        "label": "master"
                    }
                ]
            }
        }
    }
}

能夠經過設置 spring.cloud.config.server.health.enabled=false來禁用健康檢查。

spring.cloud.config.server.health.enabled=false

發現一個事情,就是在spring配置文件中,有不少配置都是沒有提示的,就像上面這個屬性。顯示的是相似於用戶本身定義的屬性的那種黃色背景。意思就是這個不是系統的屬性,可是確認是生效的。我一開始還覺得是過期的配置之類,大概是 spring 全家桶配置太多了,idea 也沒有辦法給出所有的提示吧。

相關文章
相關標籤/搜索