Spring Cloud Config Server – 占位符标签

我使用
Spring Boot开发了一个微服务.此服务使用Spring云配置服务器获取属性.这个微服务接受头中的版本,并根据版本,它执行适当的功能.在我的github repo中,我有2个分支,每个版本1个.该服务通常将以下信息发送到配置服务器以获取属性 –

应用程序名称配置文件标签

有没有办法在我的.yml文件中使用占位符代替标签?我希望标签动态设置为v1,如果我在标题v2中看到v1.

编辑:

我在本文档(http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html)中的“Git URI中的占位符”一节中看到了对占位符的引用,但是我不确定如何从传入的请求中动态替换值

最佳答案 spring-cloud-config-server提供了几个REST API,允许直接查询属性文件:

$hostname:port/{label}/{name}-{profiles}.properties]

您可以动态使用您选择的任何标签,只要它与git上的现有标签匹配即可.

例如,要检索application.properties,在git中标记为v1:

 $http://${hostname}:${port}/v1/application.properties

配置服务器REST API:

> /{name}/{profiles}/{label:.*
> /{label}/{name}-{profiles}.properties
> /{name}-{profiles}.json
> /{label}/{name}-{profiles}.json
> /{label}/{name}-{profiles}.yml
> /{label}/{name}-{profiles}.yaml
> /{name}-{profiles}.yml
> /{name}-{profiles}.yaml
> /{name}/{profiles:.[^-].}
> /{name}-{profiles}.properties
> / {name} / {profile} / {label} / **

我在git上尝试了一个带有属性文件的示例spring-cloud-server项目.我在文件中为每个标签应用了不同值的git标签v1和v2(我使用了配置文件远程):

标签v1:

http://localhost:8888/v1/application-remote.properties
> testproperty: remotevalue-v1

标签v2:

http://localhost:8888/v2/application-remote.properties
> testproperty: remotevalue-v2

无标签:

http://localhost:8888/application-remote.properties
> testproperty: remotevalue-master

Java代码

我没有尝试过,但我想你也可以使用cloud-config-server的java API(直接注入和调用控制器而不是执行http请求):

@Autowired
EnvironmentController environmentController;
...

Environment labelled = environmentController.labelled("application", "remote", "v1");
Map<?, ?> keyValues = labelled.getPropertySources().get(0).getSource();
点赞