0

我们在 K8 集群中运行我们的应用程序,并依赖于环境变量的配置。Quarkus中application.properties/application.yaml参数的转换适用以下转换规则:https ://github.com/eclipse/microprofile-config/blob/master/spec/src/main/asciidoc/configsources.asciidoc #default-configsources

在这个规则中没有提到如何转换集合。

假设我有以下配置:

server.environments[0].name=dev
server.environments[0].apps[0].name=rest
server.environments[0].apps[0].services=bookstore,registration
server.environments[0].apps[0].databases=pg,h2
server.environments[0].apps[1].name=batch
server.environments[0].apps[1].services=stock,warehouse

我如何将其转换为环境变量?

我尝试了以下方法:

SERVER_ENVIRONMENT_0_APPS_0_DATABASES
SERVER_ENVIRONMENT[0]_APPS[0]_DATABASES

没有机会让它发挥作用。有谁知道如何做到这一点?这仍然支持吗?

4

1 回答 1

1

您非常接近,只需遵循文档中提到的规则:

  1. 用 _ 替换每个既不是字母数字也不是 _ 的字符;然后将名称转换为大写(即 COM_ACME_SIZE)

因此,假设我们有一个配置属性server.environments[0].apps[0].name,当您将每个非字母数字字符替换为_并转换为大写时,您最终会得到:SERVER_ENVIRONMENTS_0__APPS_0__NAME. 请注意 和 之间的双下划线0,因为您将和APPS替换为。这肯定不会为最漂亮的 env var 名称赢得任何奖项,但它确实可以完成工作:)。.[_

您可以在 MP config 的Smallrye 实现中检查它是如何完成的——这是 Quarkus 使用的实现。

于 2021-08-24T11:08:09.840 回答