咱們將使用Spring Cloud Config包爲咱們的應用程序進行遠程配置。java
咱們的程序能夠將您的設置移動到外部,以便咱們的應用程序能夠輕鬆配置,甚至能夠更改其設置。git
這被普遍用於微服務中。能夠在不一樣的容器中屢次啓動相同的服務或應用程序,而且有一箇中心位置能夠讀取這些服務的設置。github
爲此,咱們將建立一個配置服務器和一個讀取該服務器配置的客戶端。配置服務器在GitHub上使用GIT存儲庫,咱們存儲配置文件。web
申請數據以下:spring
配置服務器
項目:config-server
港口:8888
Spring名稱:config-server
GIT服務器:https://github.com/chuchip/servercloudconfig.gitbootstrap
配置客戶端
項目:config-client
港口:8080
Spring名稱:config-client後端
1.配置服務器
您只能在Maven項目中包含此依賴項。
服務器
Spring Starter的名稱是Config Server:
app
服務器配置由單個類組成,詳細信息以下:
函數
以下所示,這裏惟一要強調的是標籤 @EnableConfigServer。
在application.properties文件中,它 應該是 參數:spring.cloud.config.server.git.uri:
在這種狀況下,咱們使用GitHub上託管的服務器Git。咱們還能夠指定使用GITlocally存儲庫,以下所示:
Spring Cloud支持的配置服務器是如下後端:
GIT
Vault
JDBC
這些其實能夠混合使用,這取決於所選擇的配置文件。
對於在示例中使用的GIT服務器,重要的是擁有一個文件,其中包含請求數據的客戶端的名稱。該文件具備後綴 .properties。
所以,若是咱們想要一個名爲config-client的客戶端應用程序的設置,也就是說變量spring.application.name 等於 config-client,咱們必須有一個名爲config-client.properties. 的文件。該文件的內容將是:
請注意,可使: 或者= 。
除非您但願咱們的字符串包含這些引號,不然請勿使用引號來分隔文字。
要查看客戶端的值,咱們將發出一個GET請求,指定客戶端名稱和配置文件。
在這種狀況下,若是您未指定任何配置config-client文件,咱們會要求您提供客戶端配置和配置default文件。
要查看配置文件的設置production, 您能夠調用URL:HTTP:// localhost:8888 / config-client / production,它顯示如下輸出:
這表示文件內容 config-client-production.properties,而後顯示文件內容 的config-client.properties。
所以,若是所需的配置文件中存在變量,則將返回該值。不然,它默認狀況下在配置文件中查找 ,返回指定的值(若是有的話)。
客戶端設置
一旦咱們的配置服務器工做,咱們將建立客戶端。
咱們將此dependency項添加到Maven文件中:
使用Spring Initializr將添加Config Client依賴項。此外,要刷新熱配置,請添加啓動器執行器。
如今,咱們將應用程序配置爲指定偵聽配置服務器的位置。首先,咱們將經過bootstrap.properties更改文件config.properties的名稱。所以,Spring Boot知道要查找服務器配置。
在此文件中,咱們添加了spring.cloud.config.uri, 指定服務器配置URL 的屬性。
咱們還創建了屬性management.endpoints.web.exposure.include來refresh配置包執行程序,以便您能夠訪問URL: http://localhost:8080/actuator/refresh 這將強制咱們刷新配置。
請記住,該變量spring.application.name設置應用程序名稱,並指示GIT存儲庫中尋找設置的文件的名稱。
使用變量 spring.profiles.active,咱們指出將使用哪一個配置文件。若是咱們不聽任何註釋行,使用的配置文件將是默認配置文件。
在此示例中,我使用了幾種方法來讀取配置。
1.建立包含標籤的組件 @ConfigurationProperties
在這個最簡單的方法中,咱們指出哪一個是要讀取的屬性的根,而後定義Spring應該填充的變量。
在類中,configuration.java, 咱們指定咱們要配置以limites開頭的變量。
所以,變量dato1將具備指定的值limites.dato1.
若是 limites.dato1的值不能傳遞給整數,咱們的應用程序就會失敗; 可是,若是您沒有找到該值,只需在不給出任何錯誤的狀況下填寫它。
該組件將經過標籤注入 @Autowired。
2.使用註釋建立變量 @Value
所以,這也會將讀取服務器配置的值。最大的區別是該值將被固定,由於它將被分配用於運行應用程序而且永遠不會刷新。
變量valorFijo將在行上分配值:valores.valor_fijo.
3.使用@Value 函數參數中的條目
一樣,從服務器配置讀取該值,其優勢是能夠刷新該值。
運做
在咱們的示例中,公開URL /limites,refrescado,和datos。
調用 limites返回此輸出:
若是咱們更改文件 <u>config-client.properties</u>並在咱們的GIT存儲庫服務器中進行推送和提交這樣的值,對此URL的連續調用將顯示舊數據,由於客戶端只讀取該星形的配置,除非你強迫他刷新數據。
想象一下,咱們更改'config-client.properties'文件,以便咱們如今擁有如下值:
作相應的提交和推送:
當您使用POST類型請求調用URL http:// localhost:8080 / actuator / refresh時, Spring會強制它們調用服務器配置並刷新值。
如圖所示,此請求的輸出返回刷新的變量。
如今,若是咱們調用 http://localhost: 8080/limits,咱們會看到這一點的價值 minResuados ,並 maxResultados 已經改變。然而,不管是 valorFijo 或 valorFuncion 已經改變。
若是咱們調用URL http:// localhost:8080 / refrescado 並看到變量 valorFuncion 已更新,則調用將放在標籤上, @Value 以便在那時讀取變量。可是,變量 valorFijo 不會在程序開頭時更改,其值保持不變。
本人創業團隊產品MadPecker,主要作BUG管理、測試管理、應用分發,有須要的朋友歡迎試用、體驗!本文爲MadPecker團隊產品經理譯製,轉載請標明出處