SpringCloud學習系列之四-----配置中心(Config)使用詳解
前言
本篇主要介紹的是SpringCloud中的分散式配置中心(SpringCloud Config)的相關使用教程。
SpringCloud Config
Config 介紹
Spring Cloud Config專案是一個解決分散式系統的配置管理方案。它包含了Client和Server兩個部分,server提供配置檔案的儲存、以介面的形式將配置檔案的內容提供出去,client通過介面獲取資料、並依據此資料初始化自己的應用。
開發準備
開發環境
- JDK:1.8
- SpringBoot:2.1.1.RELEASE
- SpringCloud:Finchley
注:不一定非要用上述的版本,可以根據情況進行相應的調整。需要注意的是SpringBoot2.x以後,jdk的版本必須是1.8以上!
確認了開發環境之後,我們再來新增相關的pom依賴。
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>
SpringCloud Config 示例
目前SpringCloud Config的使用主要是通過Git/SVN方式做一個配置中心,然後每個服務從其中獲取自身配置所需的引數。SpringCloud Config也支援本地引數配置的獲取。如果使用本地儲存的方式,在 application.properties
或 application.yml
檔案新增 spring.profiles.active=native
配置即可,它會從專案的 resources路徑下讀取配置檔案。如果是讀取指定的配置檔案,那麼可以使用 spring.cloud.config.server.native.searchLocations = file:D:/properties/
服務端
首先是服務端這塊,首先建立一個註冊中心,為了進行區分,建立一個springcloud-config-eureka
的專案。 程式碼和配置和之前的基本一樣。
application.properties
配置資訊:
配置資訊:
spring.application.name=springcloud-hystrix-eureka-server
server.port=8005
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:8005/eureka/
配置說明:
- spring.application.name: 這個是指定服務名稱。
- server.port:服務指定的埠。
- eureka.client.register-with-eureka:表示是否將自己註冊到Eureka Server,預設是true。
- eureka.client.fetch-registry:表示是否從Eureka Server獲取註冊資訊,預設為true。
- eureka.client.serviceUrl.defaultZone: 這個是設定與Eureka Server互動的地址,客戶端的查詢服務和註冊服務都需要依賴這個地址。
服務端這邊只需要在SpringBoot啟動類新增@EnableEurekaServer
註解就可以了,該註解表示此服務是一個服務註冊中心服務。
程式碼示例:
@SpringBootApplication
@EnableEurekaServer
public class ConfigEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigEurekaApplication.class, args);
System.out.println("config 註冊中心服務啟動...");
}
}
建立好了註冊中心之後,我們再來建立一個配置中心,用於管理配置。
建立一個springcloud-config-server
的專案。然後在application.properties
配置檔案新增如下配置:
配置資訊:
spring.application.name=springcloud-config-server
server.port=9005
eureka.client.serviceUrl.defaultZone=http://localhost:8005/eureka/
spring.cloud.config.server.git.uri = https://github.com/xuwujing/springcloud-study/
spring.cloud.config.server.git.search-paths = /springcloud-config/config-repo
spring.cloud.config.server.git.username =
spring.cloud.config.server.git.password =
配置說明:
- spring.application.name: 這個是指定服務名稱。
- server.port:服務指定的埠。
- eureka.client.serviceUrl.defaultZone: 這個是設定與Eureka Server互動的地址,客戶端的查詢服務和註冊服務都需要依賴這個地址。
- spring.cloud.config.server.git.uri: 配置的Git長褲的地址。
- spring.cloud.config.server.git.search-paths: git倉庫地址下的相對地址 多個用逗號","分割。
- spring.cloud.config.server.git.username:git倉庫的賬號。
- spring.cloud.config.server.git.password:git倉庫的密碼。
注:如果想使用本地方式讀取配置資訊,那麼只需將spring.cloud.config.server.git
的配置改成spring.profiles.active=native
,然後在resources路徑下新增一個檔案即可。
這裡為了進行本地配置檔案測試,新建一個configtest.properties
配置檔案,新增如下內容:
word=hello world
程式碼這塊也很簡單,在程式主類中,額外新增@EnableConfigServer
註解,該註解表示啟用config配置中心功能。程式碼如下:
、、、
@EnableDiscoveryClient
@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
System.out.println("配置中心服務端啟動成功!");
}
}
、、、
完成上述程式碼之後,我們的配置中心服務端已經構建完成了。
客戶端
我們新建一個springcloud-config-client
的專案,用於做讀取配置中心的配置。pom依賴還是和配置中心一樣,不過需要新增一個配置,用於指定配置的讀取。
建立一個bootstrap.properties
檔案,並新增如下資訊:
配置資訊:
spring.cloud.config.name=configtest
spring.cloud.config.profile=pro
spring.cloud.config.label=master
spring.cloud.config.discovery.enabled=true
spring.cloud.config.discovery.serviceId=springcloud-config-server
eureka.client.serviceUrl.defaultZone=http://localhost:8005/eureka/
配置說明:
- spring.cloud.config.name: 獲取配置檔案的名稱。
- spring.cloud.config.profile: 獲取配置的策略。
- spring.cloud.config.label:獲取配置檔案的分支,預設是master。如果是是本地獲取的話,則無用。
- spring.cloud.config.discovery.enabled: 開啟配置資訊發現。
- spring.cloud.config.discovery.serviceId: 指定配置中心的service-id,便於擴充套件為高可用配置叢集。
- eureka.client.serviceUrl.defaultZone: 這個是設定與Eureka Server互動的地址,客戶端的查詢服務和註冊服務都需要依賴這個地址。
注:上面這些與spring-cloud相關的屬性必須配置在bootstrap.properties中,config部分內容才能被正確載入。因為bootstrap.properties的相關配置會先於application.properties,而bootstrap.properties的載入也是先於application.properties。需要注意的是eureka.client.serviceUrl.defaultZone
要配置在bootstrap.properties,不然客戶端是無法獲取配置中心引數的,會啟動失敗!
application.properties配置
spring.application.name=springcloud-config-client
server.port=9006
配置說明:
- spring.application.name: 這個是指定服務名稱。
- server.port:服務指定的埠。
程式主類程式碼,和之前的基本一致。程式碼如下:
程式碼示例:
@EnableDiscoveryClient
@SpringBootApplication
public class ConfigClientApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigClientApplication.class, args);
System.out.println("配置中心客戶端啟動成功!");
}
}
為了方便查詢,在控制中進行引數的獲取,並返回。@Value
註解是預設是從application.properties
配置檔案獲取引數,但是這裡我們在客戶端並沒有進行配置,該配置在配置中心服務端,我們只需指定好了配置檔案之後即可進行使用。
程式碼示例:
@RestController
public class ClientController {
@Value("${word}")
private String word;
@RequestMapping("/hello")
public String index(@RequestParam String name) {
return name+","+this.word;
}
}
到此,客戶端專案也就構建完成了。
功能測試
完成如上的工程開發之後,我們來進行測試。
本地測試
首先我們把springcloud-config-server
專案的application.properties
配置檔案新增spring.profiles.active=native
配置,註釋掉spring.cloud.config.server.git
相關的配置,然後在src/main/resources目錄下新建一個configtest.properties
檔案,然後在裡面新增一個配置word=hello world
。
新增完成之後,我們依次啟動springcloud-config-eureka
、springcloud-config-server
、springcloud-config-client
這三個專案。啟動成功之前,先看來看看配置中心服務端的配置檔案獲取,在瀏覽器輸入:
檢視該檔案的配置資訊。
注:配置檔案的名稱是configtest.properties
,但是如果直接該名稱的話是獲取不到的,因為在配置檔名需要通過-
來進行獲取,如果配置檔名稱沒有-
,那麼添加了-
之後,會自動進行匹配搜尋。
springcloud config 的URL與配置檔案的對映關係如下:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
上面的url會對映{application}-{profile}.properties對應的配置檔案,{label}對應git上不同的分支,預設為master。
介面返回:
word: hello world
然後呼叫客戶端的介面,檢視是否能夠獲取配置資訊。在瀏覽器上輸入:
介面返回:
pancm,hello world
示例圖:
Git測試
在完成本地測試之後,我們把這個spring.profiles.active=native
配置註釋掉,解除spring.cloud.config.server.git
相關的註釋(賬號和密碼要填寫真實的),然後在git倉庫上建立一個config-repo 資料夾,新建configtest-pro.properties
、configtest-dev.properties
兩個配置,這兩個的配置分別是word=hello world!!
和word=hello world!
, 然後和configtest.properties
配置檔案一起上傳到config-repo 資料夾中。
首先在瀏覽器輸入:
瀏覽器返回:
word: hello world!
然後再瀏覽器輸入:
瀏覽器返回:
word: hello world!!
上傳了configtest.properties
檔案,但是這個檔名稱沒有-
,我們想獲取其中引數的資訊的話,可以在然後-
隨意新增一個引數,它會自動進行匹配,在瀏覽器輸入:
瀏覽器返回:
word: hello world
然後進行客戶端介面呼叫測試,在瀏覽器輸入:
瀏覽器返回:
pancm,Hello World!!
由於這裡我配置的字首是 pro ,所以讀取的是 configtest-pro.properties 檔案的資料,想要獲取其他的配置,修改spring.cloud.config.profile
配置即可。
示例圖:
其他
專案地址
基於SpringBoot2.x、SpringCloud的Finchley版本開發的地址:https://github.com/xuwujing/springcloud-study
基於SpringBoot1.x、SpringCloud 的Dalston版本開發的地址: https://github.com/xuwujing/springcloud-study-old
如果感覺專案不錯,希望能給個star,謝謝!
音樂推薦
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=1344874921&auto=0&height=66"></iframe>
原創不易,如果感覺不錯,希望留言推薦!您的支援是我寫作的最大動力! 版權宣告: 作者:虛無境 部落格園出處:http://www.cnblogs.com/xuwujing CSDN出處:http://blog.csdn.net/qazwsxpcm 個人部落格出處:http://www