spring cloud config如何使用本地属性覆盖远程属性

Posted

技术标签:

【中文标题】spring cloud config如何使用本地属性覆盖远程属性【英文标题】:How spring cloud config use local property override remote property 【发布时间】:2017-10-03 15:48:33 【问题描述】:

我知道应该设置以下属性,但仍然对应该设置的位置感到困惑。

spring:
    cloud:
        config:
            allowOverride: true
            failFast: true
            overrideNone: false

spring cloud 服务器端或客户端或远程 git 存储库上的 application.properties 文件?

我将它们设置在服务器端的 application.yml 中,但不起作用。

我尝试在远程git上的application.yml中设置,还是不行,希望你能给我一些帮助,谢谢。

【问题讨论】:

在你的 spring-boot 应用程序的 bootstrap.yml 中设置它。 @VelNaga 感谢您的回答,但仍有问题。 bootstrap.yml应该在哪个spring-boot应用,spring cloud client还是spring cloud server? 【参考方案1】:

我在远程 git repo 中设置了以下配置。这次成功了。

spring:
  cloud:
    config:
      allowOverride: true
      overrideNone: true
      overrideSystemProperties: false

【讨论】:

如果从配置服务器获取属性怎么办?你在哪里设置 git repo 来获取值? @PhilipRego 以上属性用于配置服务器。您需要明确告诉配置服务器允许本地属性覆盖【参考方案2】:

来自 Spring Cloud 文档中的 Overriding the Values of Remote Properties 部分:

通过引导上下文添加到您的应用程序的属性源通常是“远程的”(例如来自配置服务器),并且默认情况下它们不能在本地覆盖,除非在命令行上。如果您想允许您的应用程序使用自己的系统属性或配置文件覆盖远程属性,则远程属性源必须通过设置spring.cloud.config.allowOverride=true 授予它权限(在本地设置此设置不起作用)。

一旦设置了该标志,就会有一些更细粒度的设置来控制远程属性相对于系统属性和应用程序本地配置的位置:spring.cloud.config.overrideNone=true 可以覆盖任何本地属性源,spring.cloud.config.overrideSystemProperties=false 如果只是系统属性和环境变量应该覆盖远程设置,而不是本地配置文件。

所以,它必须设置在远程application.yml(例如远程git存储库)中。正如here 所述:“应用无法自行决定是否可以覆盖来自远程源的配置”

【讨论】:

很好的答案。但是一个小问题。 bootstrap.yml 呢?如果我在云配置服务器中有一个键:值对并且我的 bootstrap.yml 中有相同的键:值对,当我启动我的应用程序时,哪个优先?谢谢 @theprogrammer 如此处所述:cloud.spring.io/spring-cloud-static/spring-cloud-commons/… bootstrap.yml 中声明的任何属性本身的优先级都非常低(低于 application.yml)。 好的,所以 app.yml 优先于 bootstrap.yml。云配置服务器上的 bootstrap.yml 呢? 您能否展示如何在“命令行”上本地覆盖。如果我想在不影响其他开发人员的情况下在本地快速设置属性怎么办?【参考方案3】:

'spring boot app' 'config-repo'

config-repo

中的 application.properties 中设置以下属性
spring.cloud.config.allowOverride=true
spring.cloud.config.overrideNone=true
spring.cloud.config.overrideSystemProperties=false

如果远程文件是 yml 则低于格式

spring:
  cloud:
    config:
      allowOverride: true
      overrideNone: true
      overrideSystemProperties: false

【讨论】:

以上是关于spring cloud config如何使用本地属性覆盖远程属性的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Config + Spring Cloud Bus + RabbitMQ - 不使用本地 Git 存储库自动刷新客户端

带有本地存储库的 Spring Cloud Config Server 配置

0702-spring cloud config-git仓库配置用户授权

Spring Cloud Config采坑记

Spring Cloud搭建手册——Spring Cloud Config

spring cloud --- config 配置中心 [本地git获取配置文件]