springcloud本地配置优先方式
作者:火冰鬼舞
这篇文章主要介绍了springcloud本地配置优先方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
springcloud本地配置优先
如果我们的项目使用了远程配置中心,就会使用远程配置优先。可在实际开发中,通常我们需要本地的部分配置优先于远程配置,方便开发调试。
spring cloud为我们提供了相关的配置:
使用propertise配置
1.不适用远程配置
默认值是true,不要调整成false, 可以不配置,使用默认即可
# 如果想要远程配置优先级高,那么 allow-override 设置为 false,如果想要本地配置优先级高那么 allow-override 设置为 true spring.cloud.config.allow-override=true
2.本地文件优先
# 如果本地配置优先级高,那么 override-none 设置为 true,包括系统环境变量、本地配置文件等配置 spring.cloud.config.override-none=true
3.远程配置只覆盖本地配置文件
# 只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置;注意本地配置文件不是系统属性 spring.cloud.config.override-system-properties=false
2或3任意配置即可,只会生效一种。
使用yml配置同properties一样:
spring: cloud: config: # 如果本地配置优先级高,那么 override-none 设置为 true,包括系统环境变量、本地配置文件等配置 override-none: true # 如果想要远程配置优先级高,那么 allow-override 设置为 false,如果想要本地配置优先级高那么 allow-override 设置为 true allow-override: true # 只有系统环境变量或者系统属性才能覆盖远程配置文件的配置,本地配置文件中配置优先级低于远程配置;注意本地配置文件不是系统属性 override-system-properties: false
配置到这里,可能就会去尝试。不过当你配置完成后会发觉,好像配置没有生效。
不要着急,我们继续分析。
上源码:
org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration#insertPropertySources
我们反向看一下:
- 通过remoteProperties对象的属性判断的
- remoteProperties的属性是通过spring.cloud.config的键值对复制的
- 键值对是通过环境变量中incoming获取的
- incoming是new出来的也就是说没有值
- incoming的值是通过reversedComposite的的值排序后添每次加头部进去的,也就是和reversedComposite原始的顺序是一致的,propertySources中已有值,需要使用addFirst把远程配置加载到前列,就需要先倒序.
- 查看composite就知道了,最终的参数是从哪里获取的。
从结果发现,composite中的配置全部是来自与远程配置。
所以如果你需要本地配置优先,需要把上面的配置放在远程配置中的配置文件中才可以生效
同时需要注意文件顺序:
- {application.name}-{profiles}.后缀
- {application.name}.后缀
- {application.name}
- spring.cloud.nacos.config.shared-configs中的公共配置
快去试一下效果吧!!~~~~~~~~~~~~~~~~~~~~
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。