1. Spring Cloud Context: Application Context Services(应用上下文服务)

1.1 The Bootstrap Application Context(引导上下文)

一个spring cloud应用会创建一个“bootstrap”context,它是主应用的parent context。它负责加载外部资源的配置属性并且解释本地外部配置文件中的属性。

这里有两个context,一个是spring boot的main context,另一个是spring cloud的bootstrap context,这两个context共享同一个环境,也就是说他们共享spring项目的外部配置属性。

默认情况下,bootstrap属性(并非是bootstrap.properties而是那些在bootstrap阶段加载的属性)是以高优先级的方式添加的,所以无法被本地配置覆盖。

bootstrap context和main context使用不同的方法定位外部配置,你可以使用bootstrap.yml来替代application.yml来为bootstrap context添加配置,这样就可以区分开bootstrap context和main context。

可以通过在系统属性中设置spring.cloud.bootstrap.enabled=false来禁用bootstrap程序。

1.2 Application Context Hierarchies(应用上下文层级)

如果你通过SpringApplication或者SpringApplicationBuilder构建了一个application context,那么bootstrap context将会作为它的parent context被添加。

spring的一个特性是child context会从它的parent context中继承属性资源和配置文件,因此main application context有一些额外的属性资源:

“bootstrap”:如果在bootstrap context中发现PropertySourceLocators并且含有非空属性,那么一个CompositePropertySource将会以高优先级出现。

“applicationConfig”:如果你有一个bootstrap.yml,并且设置了配置bootstrap context的属性,那么它们将会被添加到child context中。但是它们具有比application.yml或者其他配置更低的优先级。

由于资源属性的排序规则,“bootstrap”入口具有高优先级。注意这不包括bootstrap.yml中的数据(具有较低优先级,可以用来设置默认属性)。

1.3 Changing the Location of Bootstrap Properties

bootstrap.yml可以通过在系统属性中设置spring.cloud.bootstrap.name或者spring.cloud.bootstrap.location来指定。

如果有一个激活的配置文件(通过spring.profiles.active或者Environment API设置),那么这些文件中的属性都会被加载。

1.4 Overriding the Values of Remote Properties(覆盖远程属性的值)

通过bootstrap context添加到应用中的属性资源可能经常是“远程”的,例如从Spring Cloud Config Server读取的属性。默认情况下,他们不能被本地覆盖。

如果你希望让你的应用通过系统属性或者本地配置来重写那些远程配置,可以通过设置远程属性资源spring.cloud.config.allowOverride=true(在本地设置无效)。

一旦设置了上面的标志,就可以通过下面两个远程属性来控制远程属性和系统属性跟本地配置的关系:

spring.cloud.config.overrideNone=true:远程属性可以被本地任意属性资源覆盖

spring.cloud.config.overrideSystemProperties=false:仅仅系统属性,命令行参数和环境变量(不包括配置文件)可以覆盖远程设置。

1.5 Customizing the Bootstrap Configuration(自定义bootstrap配置)

bootstrap context可以被设置来做任何你想要做的事,只要在/META-INF/spring.factories文件中配置org.springframework.cloud.bootstrap.BootstrapConfiguration的值即可。

它的值是以逗号分隔的@Configuration类的全限定名。所以任何你想要在main application context中注入的bean都可以在这里配置。如果你希望控制启动顺序,在类上添加@Order注解(默认顺序为最后)。

注意:不要bootstrap配置被main context加载到,即不能被@ComponentScan和@SpringBootApplication注解的配置类覆盖到。

bootstrap程序最后将初始化器注入到main SpringApplication实例中。首先,通过spring.factories中配置的类来创建bootstrap context,然后所有ApplicationContextInitializer的bean将会被添加到main SpringApplication中,在其启动前。

1.6 Customizing the Bootstrap Property Sources(定制化bootstrap属性资源)

通过bootstrap程序添加的外部配置的默认属性资源是Spring Cloud Config Server。但是可以通过添加PropertySourceLocator类型的bean到bootstrap context中(通过spring.factories)来添加额外的资源。

举个

spring cloud连载第一篇之bootstrap context的更多相关文章

  1. spring cloud连载第二篇之Spring Cloud Config

    Spring Cloud Config Spring Cloud Config为分布式服务提供了服务侧和客户侧的外部配置支持.通过Spring Cloud Config你可以有一个统一的地方来管理所有 ...

  2. Spring Cloud实战 | 最终篇:Spring Cloud Gateway+Spring Security OAuth2集成统一认证授权平台下实现注销使JWT失效方案

    一. 前言 在上一篇文章介绍 youlai-mall 项目中,通过整合Spring Cloud Gateway.Spring Security OAuth2.JWT等技术实现了微服务下统一认证授权平台 ...

  3. Spring Cloud实战 | 第九篇:Spring Cloud整合Spring Security OAuth2认证服务器统一认证自定义异常处理

    本文完整代码下载点击 一. 前言 相信了解过我或者看过我之前的系列文章应该多少知道点我写这些文章包括创建 有来商城youlai-mall 这个项目的目的,想给那些真的想提升自己或者迷茫的人(包括自己- ...

  4. Spring Cloud第十篇 | 分布式配置中心Config

    ​ 本文是Spring Cloud专栏的第十篇文章,了解前九篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...

  5. Spring Cloud第十一篇 | 分布式配置中心高可用

    ​ 本文是Spring Cloud专栏的第十一篇文章,了解前十篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...

  6. Spring Cloud第十三篇 | Spring Boot Admin服务监控

    本文是Spring Cloud专栏的第十三篇文章,了解前十二篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...

  7. spring boot实战(第一篇)第一个案例

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   spring boot实战(第一篇)第一个案例 前言 写在前面的话 一直想将spring boot相关内容写成一个系列的 ...

  8. Spring Cloud第四篇 | 客户端负载均衡Ribbon

    ​ 本文是Spring Cloud专栏的第四篇文章,了解前三篇文章内容有助于更好的理解本文: ​Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cl ...

  9. Spring Cloud第五篇 | 服务熔断Hystrix

    ​ 本文是Spring Cloud专栏的第五篇文章,了解前四篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...

随机推荐

  1. await使用中的阻塞和并发(二)

    本文继续上篇未完成的讨论,通过将Lambda还原成最普通的代码段,来解释上篇提出的疑问.并更正上篇中一些不太正确的写法.最后会给出无需等待Async方法返回值时,对Async方法使用await的建议, ...

  2. fatal: Not a git repository (or any parent up to mount point /home)

    问题:fatal: Not a git repository (or any parent up to mount point /home) 解决:git init

  3. python中的内置函数,递归,递归文件显示(二),二分法

    1.部分内置函数 repr()显示出字符串的官方表示形式,返回一个对象的string形式 # repr 就是原封不动的输出, 引号和转义字符都不起作用 print(repr('大家好,\n \t我叫周 ...

  4. python中的函数(基础)

    1.什么是函数 函数是指将一组数据的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用函数名即可 (函数就是对功能或者动作的封装) 2.函数的语法和定义 def 函数名() 函数体 调用: ...

  5. Git 教程 -- 基于自己学习记录

    Git 教程 -- 基于自己学习记录 1. 引言 由于学校布置了一项熟悉 git 和 svn 操作的实验,所以自己重新温习了下 git,记录过程在这. 2. 注册登录 GitHub. 3. 选择一个仓 ...

  6. jquery中通过trim() length 判断数据是否有值

    在jquery中可以通过如下方式判断某一个字符串是否有值,结合if else if 语句进行业务逻辑的处理 <!DOCTYPE html> <html lang="en&q ...

  7. 如何在ASP.NET Core 2.0中使用Razor页面

    如何在ASP.NET Core 2.0中使用Razor页面  DotNetCore2017-11-22 14:49 问题 如何在ASP.NET Core 2.0中使用Razor页面 解 创建一个空的项 ...

  8. Ubuntu 16.04防火墙

    防火墙(ufw) 说明:简单版本的防火墙,底层依赖于iptables. 安装:sudo apt-get install ufw 查看状态:sudo ufw status 开启/关闭:sudo ufw ...

  9. npm install 报错:ERR! code EINTEGRITY 解决方案

    npm升级后,npm install 报错了,报错信息:ERR! code EINTEGRITY到处百度搜索解决方案,终于找到了!“npm cache verify”这条命令帮助了不少人 npm ca ...

  10. fiddler安装和使用

    App抓包原理 客户端向服务器发起HTTPS请求 抓包工具拦截客户端的请求,伪装成客户端向服务器进行请求 服务器向客户端(实际上是抓包工具)返回服务器的CA证书 抓包工具拦截服务器的响应,获取服务器证 ...