Spring Cloud Config服務器支持一個Git倉庫URL,其中包含{application}和{profile}(以及{label})的占位符。
1.各個占位符所代表的含義
- application: 表示微服務名稱,即配置的spring.application.name
- profile: 表示當前的環境,local、feature、dev、test、prod
- label: 表示git倉庫分支,feature、develop、test、master,當然默認的話是master
記住,這三個標簽是占位符(先占住一個固定的位置,等着你再往里面添加內容的符號)在Spring Cloud Config中的應用場景如下:
2.占位符請求配置文件的形式
在啟動Config Server后去請求獲取Git Repo中的配置文件時有以下幾種請求形式。
/{application}/{profile}[/{label}] /{application}-{profile}.yml /{label}/{application}-{profile}.yml /{application}-{profile}.properties /{label}/{application}-{profile}.properties
3.示例講解
如你的配置文件的名字叫abc-config-server-dev.yml,application(微服務名稱)是abc-config-server,profile(環境)是dev。
那么我們可以通過以下的請求地址去獲取配置資源
- http://localhost:8888/abc-config-server/dev #不顯示配置默認label的話,默認獲取master分支上的abc-config-server-dev.yml
- http://localhost:8888/abc-config-server/dev/develop #獲取develop分支上的abc-config-server-dev.yml資源
- http://localhost:8888/abc-config-server-dev.yml #直接獲取abc-config-server-dev.yml資源(返回信息只有配置文件內的信息沒有多余的Git信息)
- http://localhost:8888/develop/abc-config-server-dev.yml #獲取develop分支上的abc-config-server-dev.yml資源
4.占位符在配置文件中使用場景:
一、利用application去占位git uri )輕松支持“每個應用程序的一個repo”策略。
spring: cloud: config: server: git: uri: https://github.com/lingyejun/{application}
如我們從http://localhost:8888/abc-config-server/dev去獲取的話,那么會將application自動占位為abc-config-server,即去https://github.com/lingyejun/abc-config-server這個倉庫的根目錄下找abc-config-server-dev.yml資源
二、利用占位符去當前倉庫根目錄下找配置文件,找不到則去占位符對應的目錄下找
spring: application: name: config-server-demo cloud: config: server: git: uri: https://github.com/lingyejun/{application} username: lingyejun password: password repos: abc-client: pattern: abc* #對application name的模式匹配 uri: https://github.com/lingyejun/configserver username: lingyejun password: password search-paths: '{application}' #注意:這里要加引號不然會因為yml格式不合法而導致配置不生效 clone-on-start: true #啟動時自動clone default-label: develop #設置默認分支
我們請求http://localhost:8888/abc-config-server/dev,application為abc-config-server匹配到abc-config-server的pattern模式,然后去https://github.com/lingyejun/configserver的develop分支拉取abc-config-server-dev.yml文件,如果在根目錄下找不到的話則會去abc-config-server文件夾在去找。
注意:search-paths: '{application}'這里要加引號不然會因為yml格式不合法而導致配置不生效。
5.設置默認分支default-lable不生效的問題?
之前用.properties文件配置默認分支
spring.cloud.config.server.git.uri=https://github.com/lingyejun/configserver spring.cloud.config.server.git.username=lingyejun spring.cloud.config.server.git.password=password spring.cloud.config.server.git.default-label=develop spring.cloud.config.server.git.search-paths=abc-config-server
spring.cloud.config.server.git.default-label=develop 用這個屬性是可以的,可以將默認分支更改為develop,但是換成.yml格式的后就不生效了
spring: application: name: config-server-demo cloud: config: server: git: uri: https://github.com/lingyejun/{application} username: lingyejun password: password default-label: develop search-paths: abc-config-server
真的不生效了,什么仇什么怨!
經過我百般嘗試之后發現將這個標簽放到repo標簽下就是生效的
spring: application: name: config-server-demo cloud: config: server: git: uri: https://github.com/lingyejun/{application} username: lingyejun password: password search-paths: abc-config-server repos: phihome-client: pattern: abc* uri: https://github.com/lingyejun/{application} username: lingyejun password: password default-label: develop #放在這里就是OK的 search-paths: '{application}'