如何将配置中的集合转换为 Microprofile/Quarkus/Smallrye 中的环境变量

How to convert a collection in config to environment variable in Microprofile/Quarkus/Smallrye

我们 运行 我们的应用程序在 K8 集群中,依赖于环境变量的配置。对于 application.properties/application.yaml 参数在 Quarkus 中的转换,适用以下转换规则: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

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

你已经很接近了,只要遵守文档中提到的规则即可:

  1. Replace each character that is neither alphanumeric nor _ with _; then convert the name to upper case (i.e. COM_ACME_SIZE)

假设我们有一个名为 server.environments[0].apps[0].name 的配置 属性,当您将每个非字母数字字符替换为 _ 并转换为大写时,您最终会得到:SERVER_ENVIRONMENTS_0__APPS_0__NAME.请注意 0APPS 之间的双下划线,因为您将 .[ 都替换为 _。 这当然不会因最漂亮的环境变量名称而赢得任何奖项,但它确实起到了作用:)。

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