Spring Cloud Config Server环境变量优先级

在使用spring cloud配置服务器时,我对环境变量的优先级有疑问

在我的服务中,我有一个带有此内容的本地属性文件application.yml

 foo: bar: "some" buz: "some" joe: "some" 

该服务还连接到配置服务器,配置存储库包含文件testservice-api.yml (其中testservice-api是服务的spring应用程序名称)。 该文件的内容是:

 foo: bar: "some-specific" 

因此,使用此设置,运行时的配置将导致:

 { "foo.bar": "some-specific", "foo.buz": "some", "foo.joe": "some" } 

现在我尝试用环境变量覆盖foo.barfoo.joe

所以我用这个命令启动服务:

FOO_BAR=some-env FOO_JOE=some-env gradle bootRun

从我在spring boot文档的这一部分中读到的内容 ,环境变量应优先于配置文件 – spring cloud配置文档也没有说明不同 – 所以我希望结果如下:

 { "foo.bar": "some-env", "foo.buz": "some", "foo.joe": "some-env" } 

但相反,我得到:

 { "foo.bar": "some-specific", "foo.buz": "some", "foo.joe": "some-env" } 

因此,只有来自jar内部的本地配置文件的配置被环境变量覆盖 – 来自config repo的属性似乎优先于环境变量。

这可以解释 – 或者这是一个错误? 这个提示有什么提示吗?

请在此处找到示例代码:

https://github.com/mduesterhoeft/configserver-test

存储库中的README将此处描述的问题列为用例3

在git repo中定义以下属性(作为config-server的源代码)[对于给定的配置文件]: spring.cloud.config: overrideSystemProperties: false overrideNone: true

请记住,bootsrap.yml中的属性(特别是overrideSystemProperties和overrideNone)默认被config-server覆盖。