如何使用Spring Config Service设置本地配置属性

时间:2016-09-01 01:25:56

标签: spring-cloud spring-cloud-config

所以我最近学会了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,我不知道在使用像这样的集中配置服务时如何引用本地值?

2 个答案:

答案 0 :(得分:0)

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

  

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

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

答案 1 :(得分:0)

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

  

通过引导上下文添加到应用程序中的属性源通常是“远程”的(例如,从Config Server),默认情况下,除非在命令行上,否则它们不能在本地被覆盖。如果要允许您的应用程序使用其自己的系统属性或配置文件覆盖远程属性,则远程属性源必须通过设置spring.cloud.config.allowOverride=true来授予其权限(在本地设置无效)。 / p>      

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

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

application.yml