这是我参与更文挑战的第19天,活动详情查看:更文挑战。java
Spring cloud,相信你们已经耳熟能详了。Spring cloud 是一个基于 Spring boot 实现的云应用开发工具;Spring boot 专一于快速、方便集成的单个个体。web
那么问题来了,Spring cloud 单体里的上下文是什么呢?spring
首先咱们回忆下 Spring 的应用上下文,什么是应用上下文呢?能够简单的理解,就是将你须要 Spring 帮你管理的对象放入容器的那么一种容器对象。应用上下文便是Spring容器的一种抽象化表述,而咱们常见的ApplicationContext 本质上说就是一个维护 Bean 定义以及对象之间协做关系的牛逼接口。Spring 的核心是容器,而容器并不惟一,框架自己就提供了不少个容器的实现,大概分为两种类型:一种是不经常使用的 BeanFactory,这是最简单的容器,只能提供基本的 DI 功能;还有一种就是继承了BeanFactory 后派生而来的应用上下文,其抽象接口也就是咱们上面提到的ApplicationContext,它能提供更多企业级的服务,例如解析配置文件等,这也是应用上下文实例对象最多见的应用场景。有了上下文对象,咱们就能向容器注册须要 Spring 管理的对象了。对于上下文抽象接口,Spring 也为咱们提供了多种类型的容器实现,可在不一样的应用场景选择:bootstrap
AnnotationConfigApplicationContext: 从一个或多个基于java的配置类中加载上下文定义,适用于java注解的方式服务器
ClassPathXmlApplicationContext: 从类路径下的一个或多个xml配置文件中加载上下文定义,适用于xml配置的方式markdown
XmlWebApplicationContext: 从web应用下的一个或多个xml配置文件加载上下文定义,适用于xml配置方式app
FileSystemXmlApplicationContext: 从文件系统下的一个或多个xml配置文件中加载上下文定义,也就是说系统盘中加载xml配置文件框架
AnnotationConfigWebApplicationContext: 专门为web应用准备的,适用于注解方式工具
这样,只须要将管理的对象(Spring 中咱们都称为 bean)、bean 之间的协做关系配置好,经过应用上下文将配置加载到IOC容器,让Spring替咱们管理对象,待咱们须要使用对象的时候,再从容器中获取 bean 就能够了,由于容器能为你的程序提供你想要的对象管理服务了。post
那么其实一个 Spring cloud 应用程序中有一个“引导上下文”的概念,这个引导上下文是主应用程序的父上下文。引导上下文负责从配置服务器加载配置属性,以及解密外部配置文件中的属性。和主应用程序加载 application 中的属性不一样,引导上下文加载 bootstrap 中的属性。配置在 bootstrap 中的属性有更高的优先级,所以默认状况下它们不能被本地配置覆盖。
若是想禁用引导过程,可设置 spring.cloud.bootstrap.enabled=false。
bootstrap 配置文件的应用场景:
使用 Spring Cloud Config 配置中心时,这时须要在 bootstrap 配置文件中添加链接到配置中心的配置属性来加载外部配置中心的配置信息
一些固定的不能被覆盖的属性
一些加密/解密的场景
application 配置文件主要用于 Spring Boot 项目的自动化配置。