關於Spring Cloud應用程序上下文服務

Spring Boot對於如何使用Spring構建應用程序有一個見解:例如它具備常規配置文件的常規位置,以及用於常見管理和監視任務的端點。Spring Cloud創建在此之上,並添加了一些可能系統中全部組件將使用或偶爾須要的功能。html

引導應用程序上下文

一個Spring Cloud應用程序經過建立一個「引導」上下文來進行操做,這個上下文是主應用程序的父上下文。開箱即用,負責從外部源加載配置屬性,還解密本地外部配置文件中的屬性。這兩個上下文共享一個Environment,這是任何Spring應用程序的外部屬性的來源。Bootstrap屬性的優先級高,所以默認狀況下不能被本地配置覆蓋。spring

引導上下文使用與主應用程序上下文不一樣的外部配置約定,所以使用bootstrap.yml application.yml(或.properties)代替引導和主上下文的外部配置。例:bootstrap

bootstrap.yml服務器

spring:
  application:
    name: foo
  cloud:
    config:
      uri: ${SPRING_CONFIG_URI:http://localhost:8888}

若是您的應用程序須要服務器上的特定於應用程序的配置,那麼設置spring.application.name(在bootstrap.ymlapplication.yml)中是個好主意。app

您能夠經過設置spring.cloud.bootstrap.enabled=false(例如在系統屬性中)來徹底禁用引導過程。ui

應用程序上下文層次結構

若是您從SpringApplicationSpringApplicationBuilder構建應用程序上下文,則將Bootstrap上下文添加爲該上下文的父級。這是一個Spring的功能,即子上下文從其父進程繼承屬性源和配置文件,所以與不使用Spring Cloud Config構建相同上下文相比,「主」應用程序上下文將包含其餘屬性源。額外的財產來源是:spa

  • 「bootstrap」:若是在Bootstrap上下文中找到任何PropertySourceLocators,則可選CompositePropertySource顯示爲高優先級,而且具備非空屬性。一個例子是來自Spring Cloud Config服務器的屬性。code

  • 「applicationConfig:[classpath:bootstrap.yml]」(若是Spring配置文件處於活動狀態,則爲朋友)。若是您有一個bootstrap.yml(或屬性),那麼這些屬性用於配置引導上下文,而後在父進程設置時將它們添加到子上下文中。它們的優先級低於application.yml(或屬性)以及做爲建立Spring Boot應用程序的過程的正常部分添加到子級的任何其餘屬性源。htm

因爲屬性源的排序規則,「引導」條目優先,但請注意,這些條目不包含來自bootstrap.yml的任何數據,它具備很是低的優先級,但可用於設置默認值。排序

您能夠經過簡單地設置您建立的任何ApplicationContext的父上下文來擴展上下文層次結構,例如使用本身的界面,或使用SpringApplicationBuilder方便方法(parent()child()sibling())。引導環境將是您建立本身的最高級祖先的父級。層次結構中的每一個上下文都將有本身的「引導」屬性源(可能爲空),以免無心中將值從父級升級到其後代。層次結構中的每一個上下文(原則上)也能夠具備不一樣的spring.application.name,所以若是存在配置服務器,則不一樣的遠程屬性源。普通的Spring應用程序上下文行爲規則適用於屬性解析:子環境中的屬性經過名稱和屬性源名稱覆蓋父項中的屬性(若是子級具備與父級名稱相同的屬性源,一個來自父母的孩子不包括在孩子中)。

請注意,SpringApplicationBuilder容許您在整個層次結構中共享Environment,但這不是默認值。所以,兄弟情境尤爲不須要具備相同的資料或財產來源,儘管它們與父母共享共同點。源碼來源

相關文章
相關標籤/搜索