springcloud的读取配置文件的优先级?

今天被问到springcloud的读取配置文件的优先级,起初我以为读取配置文件的优先级是根据项目的配置环境,然后巴拉巴拉说了一大堆,结果发现我理解错了,

其实就是指的是在项目的配置文件优先级,查了下资料,总结了下

首先要明白:springcloud的加载配置文件的机制和springboot应用加载配置文件有所差别,如它引用了bootstrap.properties的配置文件,同时也支持配置中心加载配置文件,这里主要简述下配置文件加载的优先级及覆盖关系的控制上,

1.bootstrap上下文

springboot启动的时候会去创建一个bootstrap上下文,他是引用父级上下文

(请注意这里所说的bootstrap指的是是启动最开始时加载的配置项,与bootstrap.yml或者说bootstrap.properties是两码事,这点很容易混淆)

它负责从一些外部环境中加载配置项,如配置中心;这部分配置项的优先级是最高的,因此它不会被其它的配置文件中加载的配置项给覆盖。

bootstrap的上下文使用另外一种机制来加载额外的配置文件,相对于从application.properties(或者yml)中加载配置文件中加载配置项,你也可以选择从bootstrap.properties(yml)中加载,以区分boostrap上下文中加载的配置项和主上下文加载的配置项。

可以在系统配置项或者启动命令参数中指定不使用bootstrap机制加载配置项:

spring.cloud.bootstrap.enabled=false

2.配置加载位置

springcloud应用加载项可以来自以下几个位置

1.启动命令中指定位置
2.操作系统配置项
3.环境变量
4.配置中心的配置文件
5.本地的application.properties(yml)
6.本地boostrap.properties(yml)

这几个位置的配置项从上往下优先级递减,即从上面位置加载的配置项会覆盖下面位置加载的配置项。如application.properties中加载的配置项优先级要高于bootstrap.properties中加载的配置项

3.配置项的覆盖配置

默认情况下,从Spring Cloud Config中加载的配置项,是不能被本地的配置项覆盖的,如果想要覆盖这些配置项,需要在配置中心的配置文件中(或者系统配置项、命令行配置项中等)添加以下配置项(注意本地配置文件中增加该配置无任何意义)

spring.cloud.config.allowOverride=true

参考:https://www.cnblogs.com/Mr-Rocker/p/10690304.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章