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

2023-06-06 17:07 更新

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

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

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

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

請注意,?SpringApplicationBuilder?可讓您在整個層次結(jié)構(gòu)中共享?Environment?,但這不是默認設(shè)置。因此,同級上下文尤其不需要具有相同的配置文件或?qū)傩栽矗词顾鼈兛赡芘c其父級共享相同的值。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號