最近做spring cloud 并利用 config 配置 可扩展的高可用eureka环境。遇到的问题。
问题
当第一台eureka注册中心启动时,并没有config配置中心存在,那么启动配置文件获取应该从本地获取。但是当config配置中心存在的时候不应该从本地获取配置,而是应该从配置中心进行配置。在学习config的时候了解到bootstrap的配置文件,则对bootstrap与application配置文件产生了好奇。他们的家在顺序以及配置覆盖的情况到底是怎么样的呢?
过程
一、首先去百度网上的答案,但是大部分都引用了以下两条作出答案
Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。
抱歉没有阅读原文直接应用的,从字面意思理解bootstrap有限加载,没问题。但是外部属性加载并不会覆盖本地属性就产生问题了,我无法在本地文件存在的情况下对属性进行更新。接下来我进行了实验。
二、当不存在配置中心时候bootstrap与application并存的时候取相同属性,在实验中的出结论,bootstrap优先加载但属性依然被application覆盖。
接下来又进行了一个实验,bootstrap、application与配置中心同时存在的时候发现配置中心的属性会覆盖前两个。
结论
通过两次实验的出,bootstrap、application与配置中心同时存在时,加载顺序为
bootstrap>>application>>配置中心
同时后者覆盖前者。
注:
spring boot版本为 2.1.2.RELEASE
spring cloud版本为Greenwich.SR2
网友评论