如何将配置中的集合转换为 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
没有机会让它发挥作用。有谁知道如何做到这一点?无论如何都支持吗?
你已经很接近了,只要遵守文档中提到的规则即可:
- 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
.请注意 0
和 APPS
之间的双下划线,因为您将 .
和 [
都替换为 _
。
这当然不会因最漂亮的环境变量名称而赢得任何奖项,但它确实起到了作用:)。
您可以在 MP 配置的 Smallrye implementation 中检查它是如何完成的——这是 Quarkus 使用的实现。
我们 运行 我们的应用程序在 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
没有机会让它发挥作用。有谁知道如何做到这一点?无论如何都支持吗?
你已经很接近了,只要遵守文档中提到的规则即可:
- 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
.请注意 0
和 APPS
之间的双下划线,因为您将 .
和 [
都替换为 _
。
这当然不会因最漂亮的环境变量名称而赢得任何奖项,但它确实起到了作用:)。
您可以在 MP 配置的 Smallrye implementation 中检查它是如何完成的——这是 Quarkus 使用的实现。