Spring Boot對於如何使用Spring構建應用程序有一個看法:例如它具有常規配置文件的常規位置,以及用於常見管理和監視任務的端點。Spring Cloud建立在此之上,並添加了一些可能系統中所有組件將使用或偶爾需要的功能。
引導應用程序上下文
一個Spring Cloud應用程序通過創建一個“引導”上下文來進行操作,這個上下文是主應用程序的父上下文。開箱即用,負責從外部源加載配置屬性,還解密本地外部配置文件中的屬性。這兩個上下文共享一個Environment
,這是任何Spring應用程序的外部屬性的來源。Bootstrap屬性的優先級高,因此默認情況下不能被本地配置覆蓋。
引導上下文使用與主應用程序上下文不同的外部配置約定,因此使用bootstrap.yml
application.yml
(或.properties
)代替引導和主上下文的外部配置。例:
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
,但這不是默認值。因此,兄弟情境尤其不需要具有相同的資料或財產來源,盡管它們與父母共享共同點。
從現在開始,我這邊會將近期研發的springcloud微服務雲架構的搭建過程和精髓記錄下來,幫助更多有興趣研發spring cloud框架的朋友,希望可以幫助更多的好學者。大家來一起探討spring cloud架構的搭建過程及如何運用於企業項目。源碼來源