Spring Boot对于如何使用Spring构建应用程序有一个见解:例如它具备常规配置文件的常规位置,以及用于常见管理和监视任务的端点。Spring Cloud创建在此之上,并添加了一些可能系统中全部组件将使用或偶尔须要的功能。html
一个Spring Cloud应用程序经过建立一个“引导”上下文来进行操做,这个上下文是主应用程序的父上下文。开箱即用,负责从外部源加载配置属性,还解密本地外部配置文件中的属性。这两个上下文共享一个Environment
,这是任何Spring应用程序的外部属性的来源。Bootstrap属性的优先级高,所以默认状况下不能被本地配置覆盖。spring
引导上下文使用与主应用程序上下文不一样的外部配置约定,所以使用bootstrap.yml
application.yml
(或.properties
)代替引导和主上下文的外部配置。例:bootstrap
bootstrap.yml服务器
spring: application: name: foo cloud: config: uri: ${SPRING_CONFIG_URI:http://localhost:8888}
若是您的应用程序须要服务器上的特定于应用程序的配置,那么设置spring.application.name
(在bootstrap.yml
或application.yml
)中是个好主意。app
您能够经过设置spring.cloud.bootstrap.enabled=false
(例如在系统属性中)来彻底禁用引导过程。ui
若是您从SpringApplication
或SpringApplicationBuilder
构建应用程序上下文,则将Bootstrap上下文添加为该上下文的父级。这是一个Spring的功能,即子上下文从其父进程继承属性源和配置文件,所以与不使用Spring Cloud Config构建相同上下文相比,“主”应用程序上下文将包含其余属性源。额外的财产来源是:spa
“bootstrap”:若是在Bootstrap上下文中找到任何PropertySourceLocators
,则可选CompositePropertySource
显示为高优先级,而且具备非空属性。一个例子是来自Spring Cloud Config服务器的属性。有关如何自定义此属性源的内容的说明,请参阅下文。code
“applicationConfig:[classpath:bootstrap.yml]”(若是Spring配置文件处于活动状态,则为朋友)。若是您有一个bootstrap.yml
(或属性),那么这些属性用于配置引导上下文,而后在父进程设置时将它们添加到子上下文中。它们的优先级低于application.yml
(或属性)以及做为建立Spring Boot应用程序的过程的正常部分添加到子级的任何其余属性源。有关如何自定义这些属性源的内容的说明,请参阅下文。htm
因为属性源的排序规则,“引导”条目优先,但请注意,这些条目不包含来自bootstrap.yml
的任何数据,它具备很是低的优先级,但可用于设置默认值。排序
您能够经过简单地设置您建立的任何ApplicationContext
的父上下文来扩展上下文层次结构,例如使用本身的界面,或使用SpringApplicationBuilder
方便方法(parent()
,child()
和sibling()
)。引导环境将是您建立本身的最高级祖先的父级。层次结构中的每一个上下文都将有本身的“引导”属性源(可能为空),以免无心中将值从父级升级到其后代。层次结构中的每一个上下文(原则上)也能够具备不一样的spring.application.name
,所以若是存在配置服务器,则不一样的远程属性源。普通的Spring应用程序上下文行为规则适用于属性解析:子环境中的属性经过名称和属性源名称覆盖父项中的属性(若是子级具备与父级名称相同的属性源,一个来自父母的孩子不包括在孩子中)。
请注意,SpringApplicationBuilder
容许您在整个层次结构中共享Environment
,但这不是默认值。所以,兄弟情境尤为不须要具备相同的资料或财产来源,尽管它们与父母共享共同点。源码来源