摘要:應用程序可以立即利用或應用程序開發(fā)人員提供的其他外部屬性源,它還提取了一些與變化事件相關的額外有用特性。標簽也可以以逗號分隔列表的形式提供,在這種情況下,列表中的項目將逐個嘗試,直到成功為止,在處理特性分支時,此行為非常有用。
Spring Cloud Config Client
Spring Boot應用程序可以立即利用Spring Config Server(或應用程序開發(fā)人員提供的其他外部屬性源),它還提取了一些與Environment變化事件相關的額外有用特性。
配置優(yōu)先Bootstrap在類路徑上具有Spring Cloud Config Client的任何應用程序的默認行為如下:當配置客戶端啟動時,它會綁定到Config Server(通過spring.cloud.config.uri bootstrap配置屬性)并使用遠程屬性源初始化Spring Environment。
這種行為的最終結(jié)果是,所有想要使用Config Server的客戶端應用程序都需要一個bootstrap.yml(或環(huán)境變量),其服務器地址在spring.cloud.config.uri中設置(默認為“http://localhost:8888" )。
發(fā)現(xiàn)優(yōu)先Bootstrap如果你使用DiscoveryClient實現(xiàn),例如Spring Cloud Netflix和Eureka Service Discovery或Spring Cloud Consul,你可以將Config Server注冊到Discovery Service,但是,在默認的“配置優(yōu)先Bootstrap”模式下,客戶端無法利用注冊。
如果你更喜歡使用DiscoveryClient來定位Config Server,可以通過設置spring.cloud.config.discovery.enabled=true(默認值為false)來實現(xiàn),這樣做的最終結(jié)果是客戶端應用程序都需要具有適當發(fā)現(xiàn)配置的bootstrap.yml(或環(huán)境變量)。例如,使用Spring Cloud Netflix,你需要定義Eureka服務器地址(例如,在eureka.client.serviceUrl.defaultZone中),使用此選項的代價是啟動時額外的網(wǎng)絡往返,以查找服務注冊,好處是,只要Discovery Service是固定點,Config Server就可以更改其坐標。默認服務ID是configserver,但你可以通過設置spring.cloud.config.discovery.serviceId在客戶端上更改它(在服務器上,以通常的方式提供服務,例如通過設置spring.application.name) 。
發(fā)現(xiàn)客戶端實現(xiàn)都支持某種元數(shù)據(jù)映射(例如,我們?yōu)镋ureka提供了eureka.instance.metadataMap),可能需要在其服務注冊元數(shù)據(jù)中配置Config Server的一些額外屬性,以便客戶端可以正確連接。如果使用HTTP Basic保護Config Server,則可以將憑據(jù)配置為user和password,此外,如果Config Server具有上下文路徑,則可以設置configPath,例如,以下YAML文件用于作為Eureka客戶端的Config Server:
bootstrap.yml
eureka: instance: ... metadataMap: user: osufhalskjrtl password: lviuhlszvaorhvlo5847 configPath: /configConfig Client快速失敗
在某些情況下,如果服務無法連接到Config Server,你可能希望服務啟動失敗,如果這是所需的行為,請將bootstrap配置屬性spring.cloud.config.fail-fast=true設置為使客戶端停止并顯示異常。
Config Client重試如果你預期配置服務器在應用程序啟動時偶爾可能不可用,你可以在失敗后繼續(xù)嘗試。首先,你需要設置spring.cloud.config.fail-fast=true,然后,你需要在類路徑中添加spring-retry和spring-boot-starter-aop,默認行為是重試六次,初始回退間隔為1000毫秒,后續(xù)回退的指數(shù)乘數(shù)為1.1,你可以通過設置spring.cloud.config.retry.*配置屬性來配置這些屬性(和其他屬性)。
要完全控制重試行為,請?zhí)砑右粋€類型為RetryOperationsInterceptor的@Bean,其ID為configServerRetryInterceptor,Spring Retry有一個RetryInterceptorBuilder支持創(chuàng)建它。查找遠程配置資源
Config Service從/{name}/{profile}/{label}提供屬性源,其中客戶端應用程序中的默認綁定如下:
“name” = ${spring.application.name}
“profile” = ${spring.profiles.active}(實際上是Environment.getActiveProfiles())
“l(fā)abel” = “master”
設置屬性${spring.application.name}時,不要在應用程序名稱前加上保留字application-,以防止解析正確的屬性源問題。
你可以通過設置spring.cloud.config.*來覆蓋所有這些(其中*是name、profile或label),該label可用于回滾到以前版本的配置,使用默認的Config Server實現(xiàn),它可以是git標簽,分支名稱或提交ID。標簽也可以以逗號分隔列表的形式提供,在這種情況下,列表中的項目將逐個嘗試,直到成功為止,在處理特性分支時,此行為非常有用。例如,你可能希望將配置標簽與你的分支對齊,但使其成為可選(在這種情況下,請使用spring.cloud.config.label=myfeature,develop)。
為Config Server指定多個URL當你部署了多個Config Server實例并預期一個或多個實例不時不可用時,為確保高可用性,你可以指定多個URL(作為spring.cloud.config.uri屬性下的逗號分隔列表),也可以讓所有實例在Eureka等Service Registry中注冊(如果使用發(fā)現(xiàn)優(yōu)先Bootstrap模式)。請注意,只有在Config Server未運行時(即應用程序已退出時)或發(fā)生連接超時時,才能確保高可用性,例如,如果Config Server返回500(內(nèi)部服務器錯誤)響應或Config Client從Config Server收到401(由于憑據(jù)錯誤或其他原因),則Config Client不會嘗試從其他URL獲取屬性,這種錯誤表示用戶問題而不是可用性問題。
如果在Config Server上使用HTTP基本安全性,則僅當你在spring.cloud.config.uri屬性下指定的每個URL中嵌入憑據(jù)時,才能支持每個Config Server身份驗證憑據(jù),如果使用任何其他類型的安全機制,則無法(目前)支持每個Config Server身份驗證和授權(quán)。
配置讀取超時如果要配置讀取超時,可以使用屬性spring.cloud.config.request-read-timeout來完成此操作。
安全性如果你在服務器上使用HTTP Basic安全性,客戶端需要知道密碼(如果不是默認值,則需要用戶名),你可以通過配置服務器URI或多帶帶的用戶名和密碼屬性指定用戶名和密碼,如以下示例所示:
bootstrap.yml
spring: cloud: config: uri: https://user:secret@myconfig.mycompany.com
以下示例顯示了傳遞相同信息的另一種方法:
bootstrap.yml
spring: cloud: config: uri: https://myconfig.mycompany.com username: user password: secret
spring.cloud.config.password和spring.cloud.config.username值覆蓋URI中提供的任何內(nèi)容。
如果你在Cloud Foundry上部署應用程序,提供密碼的最佳方式是通過服務憑據(jù)(例如在URI中,因為它不需要在配置文件中),以下示例在本地運行,并在名為configserver的Cloud Foundry上為用戶提供服務:
bootstrap.yml
spring: cloud: config: uri: ${vcap.services.configserver.credentials.uri:http://user:password@localhost:8888}
如果你使用其他形式的安全性,則可能需要向ConfigServicePropertySourceLocator提供一個RestTemplate(例如,通過在引導程序上下文中獲取它并注入它)。
健康指示器Config Client提供嘗試從Config Server加載配置的Spring Boot Health Indicator,可以通過設置health.config.enabled=false來禁用健康指示器,出于性能原因,還會緩存響應,生存的默認緩存時間為5分鐘,要更改該值,請設置health.config.time-to-live屬性(以毫秒為單位)。
提供自定義RestTemplate在某些情況下,你可能需要自定義從客戶端向配置服務器發(fā)出的請求,通常,這樣做涉及傳遞特殊的Authorization headers來驗證對服務器的請求,要提供自定義RestTemplate:
使用PropertySourceLocator的實現(xiàn)創(chuàng)建一個新的配置bean,如以下示例所示:
CustomConfigServiceBootstrapConfiguration.java
@Configuration public class CustomConfigServiceBootstrapConfiguration { @Bean public ConfigServicePropertySourceLocator configServicePropertySourceLocator() { ConfigClientProperties clientProperties = configClientProperties(); ConfigServicePropertySourceLocator configServicePropertySourceLocator = new ConfigServicePropertySourceLocator(clientProperties); configServicePropertySourceLocator.setRestTemplate(customRestTemplate(clientProperties)); return configServicePropertySourceLocator; } }
在resources/META-INF中,創(chuàng)建一個名為spring.factories的文件并指定自定義配置,如以下示例所示:
spring.factories
org.springframework.cloud.bootstrap.BootstrapConfiguration = com.my.config.client.CustomConfigServiceBootstrapConfigurationVault
使用Vault作為配置服務器的后端時,客戶端需要為服務器提供令牌以從Vault檢索值,可以通過在bootstrap.yml中設置spring.cloud.config.token在客戶端內(nèi)提供此令牌,如以下示例所示:
bootstrap.yml
spring: cloud: config: token: YourVaultTokenVault中的嵌套密鑰
Vault支持將密鑰嵌套在Vault中存儲的值中,如以下示例所示:
echo -n "{"appA": {"secret": "appAsecret"}, "bar": "baz"}" | vault write secret/myapp -
此命令將JSON對象寫入Vault,要在Spring中訪問這些值,可以使用傳統(tǒng)的點(.)注解,如以下示例所示:
@Value("${appA.secret}") String name = "World";
上面的代碼會將name變量的值設置為appAsecret。
上一篇:推送通知和Spring Cloud Bus 下一篇:服務發(fā)現(xiàn):Eureka客戶端文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/74107.html
摘要:快速入門這個快速入門使用的服務器和客戶端。屬性在端點中顯示為高優(yōu)先級屬性源,如以下示例所示。名為的屬性源包含值為且具有最高優(yōu)先級的屬性。屬性源名稱中的是存儲庫,而不是配置服務器。 Spring Cloud Config快速入門 這個快速入門使用Spring Cloud Config Server的服務器和客戶端。 首先,啟動服務器,如下所示: $ cd spring-cloud-con...
摘要:概要什么是創(chuàng)建并運行一個建立一個創(chuàng)建并運行一個是什么什么是配置信息一個中不只是代碼還需要連接資源和其它應用經(jīng)常有很多需要外部設置的項去調(diào)整行為如切換不同的數(shù)據(jù)庫國際化等應用中的會經(jīng)常見到的等就是配置信息常見的實現(xiàn)信息配置的方法硬編碼缺點需要 概要 什么是Spring Cloud Config? 創(chuàng)建并運行一個Spring Cloud Config Server 建立一個Reposit...
摘要:推送通知和許多源代碼存儲庫提供程序例如或通過通知你存儲庫中的更改,你可以通過提供程序的用戶界面將配置為以及你感興趣的一組事件。要覆蓋該行為時使用的策略是,它接受請求和作為參數(shù),并返回已更改的文件路徑列表。 推送通知和Spring Cloud Bus 許多源代碼存儲庫提供程序(例如Github、Gitlab、Gitea、Gitee、Gogs或Bitbucket)通過webhook通知你存...
摘要:第二步在應用的配置文件中,增加環(huán)境配置第三步啟動應用,我們可以看到日志中打印了,加載的配置文件使用實現(xiàn)在中是用來對做集合管理的重要概念。深入思考上面我們分別利用配置管理功能中的幾個不同緯度來實現(xiàn)多環(huán)境的配置管理。 前情回顧: 《Spring Cloud Alibaba基礎教程:使用Nacos實現(xiàn)服務注冊與發(fā)現(xiàn)》 《Spring Cloud Alibaba基礎教程:支持的幾種服務消費方...
摘要:下一篇介紹基于的服務注冊與調(diào)用。服務提供者工程配置這里服務提供者是使用之前進階教程第三篇整合連接池以及監(jiān)控改造而來,這里一樣的部分就不再重復說明,下面將說明新增的部分。 Spring Cloud簡介 Spring Cloud是一個基于Spring Boot實現(xiàn)的云應用開發(fā)工具,它為基于JVM的云應用開發(fā)中涉及的配置管理、服務發(fā)現(xiàn)、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分...
閱讀 1626·2021-10-14 09:43
閱讀 5503·2021-09-07 10:21
閱讀 1275·2019-08-30 15:56
閱讀 2123·2019-08-30 15:53
閱讀 1231·2019-08-30 15:44
閱讀 2010·2019-08-30 15:44
閱讀 1320·2019-08-29 17:24
閱讀 752·2019-08-29 15:19