【问题标题】:How to set local config properties with Spring Config Service如何使用 Spring Config Service 设置本地配置属性
【发布时间】:2017-01-08 17:43:25
【问题描述】:

所以我最近学习了 Spring Cloud 这个很棒的配置服务,经过一番努力,我能够设置我们的分布式应用程序,多个节点从一个配置服务器读取配置属性。

但是我不知道如何解决的一个问题是,即使大多数道具在多个节点上都是相同的,但有些道具需要本地版本,我不知道如何将本地道具与配置服务一起设置。

例如这是我的bootstrap.properties

spring.cloud.config.uri=${config.server:http://localhost:8888}
spring.application.name=worker

如果我在 bootstrap.properties 或单独的 application.properties 文件中添加其他道具,我可以在执行器的 env 端点下看到它们,就像这样,

configService:file:///home/me/work/config-test/worker.properties: 
{
    server.timeout: "100"
},

applicationConfig: [classpath:/application.properties]: {
    server.timeout: "50"
},

在我的应用程序中,server.timeout 现在将始终为 100,我不知道当我使用这样的集中配置服务时如何引用本地值?

【问题讨论】:

    标签: spring-cloud spring-cloud-config


    【解决方案1】:

    好的,经过更多研究,我找到了答案。来自https://docs.pivotal.io/spring-cloud-services/config-server/configuration-clients.html

    Spring 应用程序可以使用配置服务器作为属性源。来自配置服务器的属性将覆盖那些在本地定义的属性(例如,通过类路径中的 application.yml)。

    因此,正确的做法是将任何客户端属性排除在配置服务之外。这对我来说也意味着对于这样的属性,没有办法有一个默认值,只有当客户端值出现时才会被覆盖,这很好。

    【讨论】:

      【解决方案2】:

      来自官方文档中的Overriding the Values of Remote Properties部分:

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

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

      因此,您可以在远程 application.yml(例如远程 git 存储库)中设置以下配置,以允许本地覆盖远程属性。

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

      【讨论】:

        猜你喜欢
        • 2018-12-08
        • 2019-12-23
        • 1970-01-01
        • 2017-10-03
        • 2012-07-01
        • 1970-01-01
        • 2019-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多