隨著線上專案變的日益龐大,每個專案都散落著各種配置檔案,如果採用分布式的開發模式,需要的配置檔案隨著服務增加而不斷增多。某乙個基礎服務資訊變更,都會引起一系列的更新和重啟,運維苦不堪言也容易出錯。配置中心便是解決此類問題的靈丹妙藥。
## spring cloud config
在我們了解spring cloud config之前,我可以想想乙個配置中心提供的核心功能應該有什麼
spring cloud config可以完美的支援以上所有的需求。
spring cloud config專案是乙個解決分布式系統的配置管理方案。它包含了client和server兩個部分,server提供配置檔案的儲存、以介面的形式將配置檔案的內容提供出去,client通過介面獲取資料、並依據此資料初始化自己的應用。spring cloud使用git或svn存放配置檔案,預設情況下使用git,我們先以git為例做一套示例。
首先在github上面建立了乙個資料夾config-repo用來存放配置檔案,為了模擬生產環境,我們建立以下三個配置檔案:
// 開發環境
neo-config-dev.properties
// 測試環境
neo-config-test.properties
// 生產環境
neo-config-pro.properties
每個配置檔案中都寫乙個屬性neo.hello,屬性值分別是 hello im dev/test/pro 。下面我們開始配置server端
## server 端
org.springframework.cloud
spring-cloud-config-server
只需要加入spring-cloud-config-server包引用既可。
server:
port: 8040
spring:
name: spring-cloud-config-server
cloud:
config:
server:
git:
uri: # 配置git倉庫的位址
search-paths: config-repo # git倉庫位址下的相對位址,可以配置多個,用,分割。
username: # git倉庫的賬號
password: # git倉庫的密碼
啟動類新增@enableconfigserver
,啟用對配置中心的支援
@enableconfigserver
public static void main(string args)
}
到此server端相關配置已經完成
首先我們先要測試server端是否可以讀取到github上面的配置資訊,直接訪問:http://localhost:8001/neo-config/dev
返回資訊如下:
}]
}
上述的返回的資訊包含了配置檔案的位置、版本、配置檔案的名稱以及配置檔案中的具體內容,說明server端已經成功獲取了git倉庫的配置資訊。
如果直接檢視配置檔案中的配置資訊可訪問:http://localhost:8001/neo-config-dev.properties,
返回:neo.hello: hello im dev
修改配置檔案neo-config-dev.properties中配置資訊為:neo.hello=hello im dev update
,再次在瀏覽器訪問http://localhost:8001/neo-config-dev.properties,返回:neo.hello: hello im dev update
。說明server端會自動讀取最新提交的內容
倉庫中的配置檔案會被轉換成web介面,訪問可以參照以下的規則:
主要展示如何在業務專案中去獲取server端的配置資訊
org.springframework.cloud
spring-cloud-starter-config
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
引入spring-boot-starter-web包方便web測試
server.port=8002
bootstrap.properties如下:
spring.cloud.config.label=masterspring.cloud.config.profile:對應部分
spring.cloud.config.label:對應git的分支。如果配置中心使用的是本地儲存,則該引數無用
spring.cloud.config.discovery.service-id:指定配置中心的service-id,便於擴充套件為高可用配置集群。
啟動類新增@enableconfigserver
,啟用對配置中心的支援
public static void main(string args)
}使用@value
註解來獲取server端引數的值
@restcontroller
class hellocontroller ")
private string hello;
public string from()
}
啟動專案後訪問:http://localhost:8002/hello,返回:hello im dev update
說明已經正確的從server端獲取到了引數。到此乙個完整的服務端提供配置服務,客戶端獲取配置引數的例子就完成了。
我們在進行一些小實驗,手動修改neo-config-dev.properties中配置資訊為:neo.hello=hello im dev update1
提交到github,再次在瀏覽器訪問http://localhost:8002/hello,返回:neo.hello: hello im dev update
,說明獲取的資訊還是舊的引數,這是為什麼呢?因為spirngboot專案只有在啟動的時候才會獲取配置檔案的值,修改github資訊後,client端並沒有在次去獲取,所以導致這個問題。如何去解決這個問題呢?留到下一章我們在介紹。
示例**
出處:
Spring Cloud(六)Config配置中心
在分布式系統中,由於服務數量巨多,為了方便服務配置檔案統一管理,實時更新,所以需要分布式配置中心元件。spring cloud config致力於為分布式系統中的外部化配置提供支援 它支援配置服務放在配置服務的記憶體中 即本地 也支援放在遠端git倉庫中。在spring cloud config 元...
Spring Cloud系列(六) 配置中心
本篇要介紹的配置中心就是要把所有微服務需要使用的配置值放在同乙個地方統一管理,可以分為不同的版本,不同的環境,當要修改某個配置值時,不管是哪個服務,都可以在同乙個地方做出修改。spring cloud配置中心的架構大致如下 repo可以是本地,可以是git倉庫,可以是svn倉庫,配置中心分為服務端和...
springcloud 六 配置中心git示例
隨著線上專案變的日益龐大,每個專案都散落著各種配置檔案,如果採用分布式的開發模式,需要的配置檔案隨著服務增加而不斷增多。某乙個基礎服務資訊變更,都會引起一系列的更新和重啟,運維苦不堪言也容易出錯。配置中心便是解決此類問題的靈丹妙藥。在我們了解spring cloud config之前,我可以想想乙個...