如果您從SpringApplication或SpringApplicationBuilder構(gòu)建應(yīng)用程序上下文,則將Bootstrap上下文添加為該上下文的父級(jí)。這是一個(gè)Spring的功能,即子上下文從其父進(jìn)程繼承屬性源和配置文件,因此與不使用Spring Cloud Config構(gòu)建相同上下文相比,“主”應(yīng)用程序上下文將包含其他屬性源。額外的財(cái)產(chǎn)來源是:
·“bootstrap”:如果在Bootstrap上下文中找到任何PropertySourceLocators,則可選CompositePropertySource顯示為高優(yōu)先級(jí),并且具有非空屬性。一個(gè)例子是來自Spring Cloud Config服務(wù)器的屬性。有關(guān)如何自定義此屬性源的內(nèi)容的說明,請(qǐng)參閱下文。
·“applicationConfig:[classpath:bootstrap.yml]”(如果Spring配置文件處于活動(dòng)狀態(tài),則為朋友)。如果您有一個(gè)bootstrap.yml(或?qū)傩裕?,那么這些屬性用于配置引導(dǎo)上下文,然后在父進(jìn)程設(shè)置時(shí)將它們添加到子上下文中。它們的優(yōu)先級(jí)低于application.yml(或?qū)傩裕┮约白鳛閯?chuàng)建Spring Boot應(yīng)用程序的過程的正常部分添加到子級(jí)的任何其他屬性源。有關(guān)如何自定義這些屬性源的內(nèi)容的說明,請(qǐng)參閱下文。
由于屬性源的排序規(guī)則,“引導(dǎo)”條目?jī)?yōu)先,但請(qǐng)注意,這些條目不包含來自bootstrap.yml的任何數(shù)據(jù),它具有非常低的優(yōu)先級(jí),但可用于設(shè)置默認(rèn)值。
您可以通過簡(jiǎn)單地設(shè)置您創(chuàng)建的任何ApplicationContext的父上下文來擴(kuò)展上下文層次結(jié)構(gòu),例如使用自己的界面,或使用SpringApplicationBuilder方便方法(parent(),child()和sibling())。引導(dǎo)環(huán)境將是您創(chuàng)建自己的級(jí)祖先的父級(jí)。層次結(jié)構(gòu)中的每個(gè)上下文都將有自己的“引導(dǎo)”屬性源(可能為空),以避免無意中將值從父級(jí)升級(jí)到其后代。層次結(jié)構(gòu)中的每個(gè)上下文(原則上)也可以具有不同的spring.application.name,因此如果存在配置服務(wù)器,則不同的遠(yuǎn)程屬性源。普通的Spring應(yīng)用程序上下文行為規(guī)則適用于屬性解析:子環(huán)境中的屬性通過名稱和屬性源名稱覆蓋父項(xiàng)中的屬性(如果子級(jí)具有與父級(jí)名稱相同的屬性源,一個(gè)來自父母的孩子不包括在孩子中)。
請(qǐng)注意,SpringApplicationBuilder允許您在整個(gè)層次結(jié)構(gòu)中共享Environment,但這不是默認(rèn)值。因此,兄弟情境尤其不需要具有相同的資料或財(cái)產(chǎn)來源,盡管它們與父母共享共同點(diǎn)。