使用spring cloud config server时,我对环境变量的优先级有疑问
在我的服务中,我有一个带有此内容的本地属性文件 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.bar
和 foo.joe
.
所以我用这个命令启动服务:
FOO_BAR=some-env FOO_JOE=some-env gradle bootRun
从我在this part of the spring boot documentation中读到的内容来看,环境变量应优先于配置文件 - 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将此处描述的问题列为Use Case 3
1 回答
在git repo中定义以下属性(作为config-server的源)[对于给定的配置文件]:
spring.cloud.config: overrideSystemProperties: false overrideNone: true
请记住,bootsrap.yml中的属性(特别是overrideSystemProperties和overrideNone)默认被config-server覆盖 .