Spring 云配置服务器 - 占位符标签

Spring Cloud Config Server - Placeholder Label

我使用 Spring Boot 开发了一个微服务。此服务正在使用 Spring 云配置服务器获取属性。该微服务接受 header 中的版本,并根据版本执行相应的功能。在我的 github 仓库中,我有 2 个分支,每个版本 1 个。该服务通常将以下信息发送到配置服务器以获取属性 -

application-name + 配置文件 + 标签

有没有办法在我的 .yml 文件中用占位符代替标签?如果我在 header else v2.

中看到 v1,我希望将标签动态设置为 v1

编辑:

我在本文档 (http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html) 的 "Placeholders in 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:

  • /{名称}/{配置文件}/{标签:.*
  • /{label}/{name}-{profiles}.properties
  • /{姓名}-{个人资料}。json
  • /{label}/{name}-{profiles}.json
  • /{label}/{name}-{profiles}.yml
  • /{label}/{name}-{profiles}.yaml
  • /{名称}-{配置文件}.yml
  • /{名称}-{配置文件}.yaml
  • /{name}/{profiles:.[^-].}
  • /{名称}-{配置文件}.properties
  • /{姓名}/{个人资料}/{标签}/**

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

标签 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();