Application Context Hierarchies
如果从SpringApplication或者SpringApplicationBuilder构建上下文,Bootstrap上下文会被当成该上下文的父节点。因为子上下文继承父节点的属性资源和profile是Spring的特性,所以主上下文会包含附加的属性资源。与不使用Spring Cloud配置的上下文进行对比,附加的属性资源如下。
- “bootstrap”: 如果PropertySourceLocators出现在Bootstrap上下文中,出现的CompositePropertySource拥有高的优先级,它们是不为空的属性,阅读下面的说明了解如何定制化属性资源的内容。
- "applicationConfig: [classpath:bootstrap.yml]" 如果拥有bootstrap.yml (or properties),那么使用这些属性配置Bootstrap上下文,它们的优先级比application.yml (or properties) 低,并且别添加到子上下文的其他属性资源被用来创建Spring Boot 应用。阅读下面的说明了解如何定制化属性资源的内容。
由于属性资源的排序规则,"bootstrap"项优先,但是并不包含bootstrap.yml中的数据,bootstrap.yml中的数据的优先级非常低,可以考虑利用这种机制来设置默认值.
可以为创建ApplicationContext设置父上下文来扩展上下文层,使用自己的接口,或者使用由SpringApplicationBuilder提供的便利的方法(parent(), child() and sibling())。bootstrap上下文是大多数上下文的父节点,在层中的每个上下文拥有自己的“bootstrap”属性资源来避免属性值从父节点下降到子节点。如果存在配置服务器在层中的每个上下文都可以有不同的“spring.application.name”以及不同的远程属性资源。普通的Spring应用上下文适用属性的规则如下:子上下文的属性可以通过“name”和“属性资源”会重写父的属性,(如果子节点与父节点的属性资源有相同的name)
注意:SpringApplicationBuilder可以在整个层共享环境,但并不是默认的。因此,尽管它们会从父节点获取到相同的信息,兄弟上下文不需要有相同的profiles和属性资源,