1. 程式人生 > >Spring Cloud Config 其他配置

Spring Cloud Config 其他配置

服務替代格式

來自環境端點的預設JSON格式對於Spring應用程式的消費是完美的,因為它直接對映到Environment抽象。如果您喜歡,可以通過向資源路徑(“.yml”,“.yaml”或“.properties”)新增字尾來使用與YAML或Java屬性相同的資料。這對於不關心JSON端點的結構的應用程式或其提供的額外的元資料的應用程式來說可能是有用的,例如,不使用Spring的應用程式可能會受益於此方法的簡單性。

YAML和屬性表示有一個額外的標誌(作為一個布林查詢引數resolvePlaceholders提供)),以標示Spring ${…?}形式的源文件中的佔位符,應在輸出中解析可能在渲染之前。對於不瞭解Spring佔位符慣例的消費者來說,這是一個有用的功能。

注意 使用YAML或屬性格式存在侷限性,主要是與元資料的丟失有關。JSON被構造為屬性源的有序列表,例如,名稱與源相關聯。即使源的起源具有多個源,並且原始原始檔的名稱丟失,YAML和屬性表也合併成一個對映。YAML表示不一定是後臺儲存庫中YAML源的忠實表示:它是由平面屬性源的列表構建的,並且必須對鍵的形式進行假設。

服務純文字

您的應用程式可能需要通用的純文字配置檔案,而不是使用Environment抽象(或YAML中的其他替代表示形式或屬性格式)。配置伺服器通過/{name}/{profile}/{label}/{path}附加的端點提供這些服務,其中“name”,“profile”和“label”的含義與常規環境端點相同,但“path”是檔名(例如log.xml

)。此端點的原始檔位於與環境端點相同的方式:與屬性或YAML檔案相同的搜尋路徑,而不是聚合所有匹配的資源,只返回匹配的第一個。

找到資源後,使用正確格式(${…?})的佔位符將使用有效的Environment解析為應用程式名稱,配置檔案和標籤提供。以這種方式,資源端點與環境端點緊密整合。例如,如果您有一個GIT(或SVN)資源庫的佈局:

application.yml
nginx.conf

其中nginx.conf如下所示:

server {
    listen              80;
    server_name         ${nginx.server.name};
}

application.yml

這樣:

nginx:
  server:
    name: example.com
---
spring:
  profiles: development
nginx:
  server:
    name: develop.com

那麼/foo/default/master/nginx.conf資源如下所示:

server {
    listen              80;
    server_name         example.com;
}

/foo/development/master/nginx.conf這樣:

server {
    listen              80;
    server_name         develop.com;
}
注意 就像環境配置的原始檔一樣,“配置檔案”用於解析檔名,因此,如果您想要一個特定於配置檔案的檔案,則/*/development/*/logback.xml將由一個名為logback-development.xml的檔案解析(優先於logback.xml)。

嵌入配置伺服器

配置伺服器最好作為獨立應用程式執行,但如果需要,可以將其嵌入到另一個應用程式中。只需使用@EnableConfigServer註釋。在這種情況下可以使用的可選屬性是spring.cloud.config.server.bootstrap,它是一個標誌,表示伺服器應該從其自己的遠端儲存庫配置自身。該標誌預設關閉,因為它可能會延遲啟動,但是當嵌入在另一個應用程式中時,以與其他應用程式相同的方式初始化是有意義的。

注意 應該是顯而易見的,但請記住,如果您使用引導標誌,配置伺服器將需要在bootstrap.yml中配置其名稱和儲存庫URI。

要更改伺服器端點的位置,您可以(可選)設定spring.cloud.config.server.prefix,例如“/ config”,以提供字首下的資源。字首應該開始但不以“/”結尾。它被應用於配置伺服器中的@RequestMappings(即Spring Boot字首server.servletPathserver.contextPath)之下。

如果您想直接從後端儲存庫(而不是從配置伺服器)讀取應用程式的配置,這基本上是一個沒有端點的嵌入式配置伺服器。如果不使用@EnableConfigServer註釋(僅設定spring.cloud.config.server.bootstrap=true),則可以完全關閉端點。

推送通知和Spring Cloud Bus

許多原始碼儲存庫提供程式(例如Github,Gitlab或Bitbucket)將通過webhook通知您儲存庫中的更改。您可以通過提供商的使用者介面將webhook配置為URL和一組感興趣的事件。例如, Github 將使用包含提交列表的JSON主體和“X-Github-Event”等於“push”的標頭檔案傳送到webhook。如果在spring-cloud-config-monitor庫中新增依賴關係並激活配置伺服器中的Spring Cloud Bus,則啟用“/ monitor”端點。

當Webhook被啟用時,配置伺服器將傳送一個RefreshRemoteApplicationEvent針對他認為可能已經改變的應用程式。變更檢測可以進行策略化,但預設情況下,它只是查詢與應用程式名稱匹配的檔案的更改(例如,“foo.properties”針對的是“foo”應用程式,“application.properties”針對所有應用程式) 。如果要覆蓋該行為的策略是PropertyPathNotificationExtractor,它接受??請求標頭和正文作為引數,並返回更改的檔案路徑列表。

預設配置與Github,Gitlab或Bitbucket配合使用。除了來自Github,Gitlab或Bitbucket的JSON通知之外,您還可以通過使用表單編碼的身體引數path={name}通過POST為“/ monitor”來觸發更改通知。這將廣播到匹配“{name}”模式的應用程式(可以包含萬用字元)。

注意 只有在配置伺服器和客戶端應用程式中啟用spring-cloud-bus時才會傳送RefreshRemoteApplicationEvent
注意 預設配置還檢測本地git儲存庫中的檔案系統更改(在這種情況下不使用webhook,但是一旦編輯配置檔案,將會播放重新整理)。

歡迎關注作者的公眾號《Java程式設計生活》,每日記載Java程式猿工作中遇到的問題 在這裡插入圖片描述