關於Spring Cloud的特性與層次結構

xiaohei578發表於2018-03-08

Spring Cloud為開發人員提供了快速構建分散式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智慧路由,微代理,控制匯流排)。分散式系統的協調導致了樣板模式, 使用Spring Cloud開發人員可以快速地支援實現這些模式的服務和應用程式。他們將在任何分散式環境中執行良好,包括開發人員自己的膝上型電腦,裸機資料中心,以及Cloud Foundry等託管平臺。

特性 Spring Cloud專注於提供良好的開箱即用經驗的典型用例和可擴充套件性機制覆蓋。

分散式/版本化配置

服務註冊和發現

路由

service - to - service呼叫

負載均衡

斷路器

分散式訊息傳遞

一個Spring Cloud應用程式通過建立一個“引導”上下文來進行操作,這個上下文是主應用程式的父上下文。開箱即用,負責從外部源載入配置屬性,還解密本地外部配置檔案中的屬性。這兩個上下文共享一個Environment,這是任何Spring應用程式的外部屬性的來源。Bootstrap屬性的優先順序高,因此預設情況下不能被本地配置覆蓋。

引導上下文使用與主應用程式上下文不同的外部配置約定,因此使用bootstrap.yml application.yml(或.properties)代替引導和主上下文的外部配置。例:

bootstrap.yml spring: application: name: foo cloud: config: uri: ${SPRING_CONFIG_URI:http://localhost:8888} 如果您的應用程式需要伺服器上的特定於應用程式的配置,那麼設定spring.application.name(在bootstrap.yml或application.yml)中是個好主意。

您可以通過設定spring.cloud.bootstrap.enabled=false(例如在系統屬性中)來完全禁用引導過程。

應用程式上下文層次結構

如果您從SpringApplication或SpringApplicationBuilder構建應用程式上下文,則將Bootstrap上下文新增為該上下文的父級。這是一個Spring的功能,即子上下文從其父程式繼承屬性源和配置檔案,因此與不使用Spring Cloud Config構建相同上下文相比,“主”應用程式上下文將包含其他屬性源。額外的財產來源是:

“bootstrap”:如果在Bootstrap上下文中找到任何PropertySourceLocators,則可選CompositePropertySource顯示為高優先順序,並且具有非空屬性。一個例子是來自Spring Cloud Config伺服器的屬性。有關如何自定義此屬性源的內容的說明,請參閱 下文。

“applicationConfig:[classpath:bootstrap.yml]”(如果Spring配置檔案處於活動狀態,則為朋友)。如果您有一個bootstrap.yml(或屬性),那麼這些屬性用於配置引導上下文,然後在父程式設定時將它們新增到子上下文中。它們的優先順序低於application.yml(或屬性)以及作為建立Spring Boot應用程式的過程的正常部分新增到子級的任何其他屬性源。有關如何自定義這些屬性源的內容的說明,請參閱下文。

由於屬性源的排序規則,“引導”條目優先,但請注意,這些條目不包含來自bootstrap.yml的任何資料,它具有非常低的優先順序,但可用於設定預設值。

您可以通過簡單地設定您建立的任何ApplicationContext的父上下文來擴充套件上下文層次結構,例如使用自己的介面,或使用SpringApplicationBuilder方便方法(parent(),child()和sibling())。引導環境將是您建立自己的最高階祖先的父級。層次結構中的每個上下文都將有自己的“引導”屬性源(可能為空),以避免無意中將值從父級升級到其後代。層次結構中的每個上下文(原則上)也可以具有不同的spring.application.name,因此如果存在配置伺服器,則不同的遠端屬性源。普通的Spring應用程式上下文行為規則適用於屬性解析:子環境中的屬性通過名稱和屬性源名稱覆蓋父項中的屬性(如果子級具有與父級名稱相同的屬性源,一個來自父母的孩子不包括在孩子中)。

請注意,SpringApplicationBuilder允許您在整個層次結構中共享Environment,但這不是預設值。因此,兄弟情境尤其不需要具有相同的資料或財產來源,儘管它們與父母共享共同點。

原始碼來源:http://minglisoft.cn/honghu/technology.html

相關文章