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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值