Spring cloud 如何使用Spring配置服务设置本地配置属性

Spring cloud 如何使用Spring配置服务设置本地配置属性,spring-cloud,spring-cloud-config,Spring Cloud,Spring Cloud Config,因此,我最近学习了SpringCloud的这个很棒的配置服务,经过一些努力,我能够建立我们的分布式应用程序,多个节点从一个配置服务器读取配置属性 然而,我不知道如何解决的一个问题是,即使大多数道具在多个节点上是相同的,但有些道具需要本地版本,我不知道如何将本地道具与配置服务一起设置 例如,这是我的bootstrap.properties spring.cloud.config.uri=${config.server:http://localhost:8888} spring.applicatio

因此,我最近学习了SpringCloud的这个很棒的配置服务,经过一些努力,我能够建立我们的分布式应用程序,多个节点从一个配置服务器读取配置属性

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

例如,这是我的
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应用程序可以使用配置服务器作为属性源。配置服务器的属性将覆盖本地定义的属性(例如,通过类路径中的application.yml)


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

好吧,经过进一步研究,我找到了答案。从

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

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

来自官方文件中的部分:

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

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

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

spring:
  cloud:
    config:
      allowOverride: true
      overrideNone: true
      overrideSystemProperties: false
从官方文件中的章节:

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

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

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

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