SpringCloud 應(yīng)用程序上下文層次結(jié)構(gòu)

2023-06-06 17:07 更新

如果從?SpringApplication?或?SpringApplicationBuilder?構(gòu)建應(yīng)用程序上下文,那么Bootstrap上下文將作為父級(jí)添加到該上下文。Spring的一個(gè)功能是子上下文從其父級(jí)繼承屬性源和配置文件,因此與構(gòu)建沒有Spring Cloud Config的相同上下文相比,“ 主 ”應(yīng)用程序上下文包含其他屬性源。其他屬性來源是:

  • “ bootstrap ”:如果在Bootstrap上下文中找到任何?PropertySourceLocators?并且具有非空屬性,則會(huì)以高優(yōu)先級(jí)顯示可選的?CompositePropertySource?。一個(gè)示例是Spring Cloud Config服務(wù)器中的屬性。有關(guān)如何自定義此屬性源內(nèi)容的說明,請(qǐng)參見“ 第2.6節(jié)“自定義Bootstrap Property源” ”。
  • “ applicationConfig:[classpath:bootstrap.yml] ”(以及相關(guān)文件,如果Spring配置文件處于活動(dòng)狀態(tài)):如果您擁有?bootstrap.yml?(或?.properties?),則這些屬性用于配置Bootstrap上下文。然后,當(dāng)它們的父級(jí)被設(shè)置時(shí),它們被添加到子級(jí)上下文。它們的優(yōu)先級(jí)低于?application.yml?(或?.properties?)以及創(chuàng)建Spring Boot應(yīng)用程序過程中正常添加到子級(jí)的任何其他屬性源的優(yōu)先級(jí)。有關(guān)如何自定義這些屬性源內(nèi)容的說明,請(qǐng)參見“ 第2.3節(jié)“更改引導(dǎo)程序Properties”的位置 ”。

由于屬性源的排序規(guī)則,“ bootstrap ”條目?jī)?yōu)先。但是,請(qǐng)注意,這些不包含來自?bootstrap.yml?的任何數(shù)據(jù),該數(shù)據(jù)的優(yōu)先級(jí)非常低,但可用于設(shè)置默認(rèn)值。

您可以通過設(shè)置創(chuàng)建的任何?ApplicationContext?的父上下文來擴(kuò)展上下文層次結(jié)構(gòu),例如,使用其自己的界面或使用?SpringApplicationBuilder?便捷方法(?parent()?,?child()?和?sibling()?)。引導(dǎo)上下文是您自己創(chuàng)建的最高級(jí)祖先的父級(jí)。層次結(jié)構(gòu)中的每個(gè)上下文都有其自己的“ bootstrap ”(可能為空)屬性源,以避免無意間將價(jià)值從父輩提升到子孫后代。如果有配置服務(wù)器,則層次結(jié)構(gòu)中的每個(gè)上下文原則上也可以具有不同的?spring.application.name?,因此也具有不同的遠(yuǎn)程屬性源。正常的Spring應(yīng)用程序上下文行為規(guī)則適用于屬性解析:子上下文的屬性按名稱以及屬性源名稱覆蓋父級(jí)屬性。(如果子項(xiàng)具有與父項(xiàng)同名的屬性源,則子項(xiàng)中不包括來自父項(xiàng)的值)。

請(qǐng)注意,?SpringApplicationBuilder?可讓您在整個(gè)層次結(jié)構(gòu)中共享?Environment?,但這不是默認(rèn)設(shè)置。因此,同級(jí)上下文尤其不需要具有相同的配置文件或?qū)傩栽?,即使它們可能與其父級(jí)共享相同的值。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)