SpringCloud 应用程序上下文层次结构

2023-06-06 17:07 更新

如果从​SpringApplication​或​SpringApplicationBuilder​构建应用程序上下文,那么Bootstrap上下文将作为父级添加到该上下文。Spring的一个功能是子上下文从其父级继承属性源和配置文件,因此与构建没有Spring Cloud Config的相同上下文相比,“ 主 ”应用程序上下文包含其他属性源。其他属性来源是:

  • “ bootstrap ”:如果在Bootstrap上下文中找到任何​PropertySourceLocators​并且具有非空属性,则会以高优先级显示可选的​CompositePropertySource​。一个示例是Spring Cloud Config服务器中的属性。有关如何自定义此属性源内容的说明,请参见“ 第2.6节“自定义Bootstrap Property源” ”。
  • “ applicationConfig:[classpath:bootstrap.yml] ”(以及相关文件,如果Spring配置文件处于活动状态):如果您拥有​bootstrap.yml​(或​.properties​),则这些属性用于配置Bootstrap上下文。然后,当它们的父级被设置时,它们被添加到子级上下文。它们的优先级低于​application.yml​(或​.properties​)以及创建Spring Boot应用程序过程中正常添加到子级的任何其他属性源的优先级。有关如何自定义这些属性源内容的说明,请参见“ 第2.3节“更改引导程序Properties”的位置 ”。

由于属性源的排序规则,“ bootstrap ”条目优先。但是,请注意,这些不包含来自​bootstrap.yml​的任何数据,该数据的优先级非常低,但可用于设置默认值。

您可以通过设置创建的任何​ApplicationContext​的父上下文来扩展上下文层次结构,例如,使用其自己的界面或使用​SpringApplicationBuilder​便捷方法(​parent()​,​child()​和​sibling()​)。引导上下文是您自己创建的最高级祖先的父级。层次结构中的每个上下文都有其自己的“ bootstrap ”(可能为空)属性源,以避免无意间将价值从父辈提升到子孙后代。如果有配置服务器,则层次结构中的每个上下文原则上也可以具有不同的​spring.application.name​,因此也具有不同的远程属性源。正常的Spring应用程序上下文行为规则适用于属性解析:子上下文的属性按名称以及属性源名称覆盖父级属性。(如果子项具有与父项同名的属性源,则子项中不包括来自父项的值)。

请注意,​SpringApplicationBuilder​可让您在整个层次结构中共享​Environment​,但这不是默认设置。因此,同级上下文尤其不需要具有相同的配置文件或属性源,即使它们可能与其父级共享相同的值。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号