如何在Microprofile/Quarkus/Smallrye中将配置集合转换为环境变量
解答
该场景完全支持,你之前的写法不生效有两个核心原因:一是环境变量名称不允许包含[、]这类特殊字符,二是字段拼写和转换规则匹配错误。
正确转换规则(Quarkus集合/索引配置专用)
Quarkus对索引类配置的环境变量转换有明确约定,转换步骤如下:
- 配置项所有小写字母转为大写
- 配置项中的点
.替换为下划线_ - 配置项中的左方括号
[替换为下划线_,直接删除右方括号] - 索引数字保持不变,无需额外添加其他字符
配置示例对应正确环境变量
你给出的properties配置和对应环境变量匹配关系如下:
| 原properties配置 | 对应可生效环境变量 |
|---|---|
server.environments[0].name=dev | SERVER_ENVIRONMENTS_0_NAME=dev |
server.environments[0].apps[0].name=rest | SERVER_ENVIRONMENTS_0_APPS_0_NAME=rest |
server.environments[0].apps[0].services=bookstore,registration | SERVER_ENVIRONMENTS_0_APPS_0_SERVICES=bookstore,registration |
server.environments[0].apps[0].databases=pg,h2 | SERVER_ENVIRONMENTS_0_APPS_0_DATABASES=pg,h2 |
server.environments[0].apps[1].name=batch | SERVER_ENVIRONMENTS_0_APPS_1_NAME=batch |
server.environments[0].apps[1].services=stock,warehouse | SERVER_ENVIRONMENTS_0_APPS_1_SERVICES=stock,warehouse |
原有写法失效原因
- 第一种写法
SERVER_ENVIRONMENT_0_APPS_0_DATABASES:字段拼写错误,原配置字段是复数environments,对应转换后应为ENVIRONMENTS,少写末尾的s导致配置无法匹配。 - 第二种写法
SERVER_ENVIRONMENT[0]_APPS[0]_DATABASES:除了相同的拼写错误外,操作系统本身不允许环境变量名称包含[、]特殊字符,该类命名的环境变量根本无法被系统正常加载,自然也不会被Quarkus读取识别。
内容的提问来源于stack exchange,提问作者jsalvas
相关产品推荐
相关产品推荐

