如何将配置中的集合转换为 Microprofile/Quarkus/Smallrye 中的环境变量
Posted
技术标签:
【中文标题】如何将配置中的集合转换为 Microprofile/Quarkus/Smallrye 中的环境变量【英文标题】:How to convert a collection in config to environment variable in Microprofile/Quarkus/Smallrye 【发布时间】:2021-10-21 23:57:29 【问题描述】:我们在 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
没有机会让它工作。有谁知道如何做到这一点?无论如何都支持吗?
【问题讨论】:
【参考方案1】:你已经很接近了,只要遵循文档中提到的规则:
用 _ 替换每个既不是字母数字也不是 _ 的字符;然后将名称转换为大写(即 COM_ACME_SIZE)
因此,假设我们有一个名为 server.environments[0].apps[0].name
的配置属性,当您将每个非字母数字字符替换为 _
并转换为大写时,您最终会得到:SERVER_ENVIRONMENTS_0__APPS_0__NAME
。请注意0
和APPS
之间的双下划线,因为您将.
和[
替换为_
。
这肯定不会为最漂亮的 env var 名称赢得任何奖项,但它确实可以完成工作:)。
您可以在 MP 配置的 Smallrye implementation 中检查它是如何完成的 - 这是 Quarkus 使用的实现。
【讨论】:
天哪,我只是错过了这个点。非常感谢,成功了!以上是关于如何将配置中的集合转换为 Microprofile/Quarkus/Smallrye 中的环境变量的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 java-ee8、microProfile 4.0、Openliberty 21 和 Docker 设置特定于阶段的微配置文件配置
Quarkus & Microprofile:有没有更好的方法将 application.properties 中的属性用于@ClientHeaderParam?
使用 mp.config.profile 设置 Microprofile 活动配置文件在 Liberty 中不起作用