如何基于 Application.yaml 中的另一个属性设置属性名称



我有一个动态服务名称,要在应用程序中配置它.yml,我正在尝试使用它进行设置

my_service: ${vcap.services.${service_name}.credentials.hostname}

解析文档失败,尝试使用 2 个不同的属性

my_property: vcap.services.${service_name}.credentials.hostname
my_service: ${my_property}

在这种情况下,它可以正确撰写属性名称,但它将该内容用作字符串,而不是解析它。

知道吗?

可以让一个属性引用另一个属性(即嵌套(,但不能在另一个属性中嵌入一个属性。

这有效(Spring Boot 2.1 和 Spring 5.1(:

my.url=http://localhost:8888/service/${nestedProperty}
nestedProperty=foo/bar/baz

但正如您发现的那样,这无法正确解析:

my_service: ${vcap.services.${service_name}.credentials.hostname}

我能够使用属性占位符和 SPEL 的组合来工作。

vcap:
services:
test-db:
credentials:
hostname: freedom
service_name: test-db
my_service: "#{'${vcap.services.${service_name}.credentials.hostname}'}"

显然,您可以省略vcap部分,我这样做只是为了使测试更容易。使用'${..}'将导致SPEL查找属性,并且似乎能够解析嵌入属性。

不过,这一切都有点丑陋。您可能需要考虑使用配置文件有条件地连接不同的数据库依赖项,或使用java-cfenv获取Cloud Foundry提供的服务信息。

希望对您有所帮助!

相关内容

  • 没有找到相关文章

最新更新