如何通过环境变量设置Quarkus激活的配置Profile
Quarkus动态指定激活Profile的实现方式
Quarkus底层依赖SmallRye Config完成配置加载,原生支持配置插值、环境变量注入、默认值设置能力,不需要额外引入扩展,按照框架约定调整配置即可实现需求。
具体配置方法
不要使用你预期中自定义的profiles.active配置节点,Quarkus在启动的极早期阶段就会读取激活的Profile配置,只会识别框架约定的quarkus.profile配置项(你之前用的smallrye.config.profile是底层兼容配置,官方更推荐使用Quarkus标准前缀的配置项)。
quarkus.profile原生支持逗号分隔传入多个Profile,你直接在application.yml里按如下写法配置,就能同时实现环境变量动态指定+默认值兜底的效果:
quarkus: profile: ${APP_PROFILE:prod},${APP_DATABASE_PROFILE:postgres}
这种写法和列表形式传参的效果完全一致,插值逻辑会在Profile加载阶段提前执行,不会出现配置加载时机太晚导致Profile不生效的问题。
生效规则
配置完成后启动应用,环境变量的生效逻辑完全符合预期:
- 不设置任何相关环境变量时,默认激活
prod、postgres两个Profile,和你原来的硬编码配置效果一致 - 同时设置
APP_PROFILE=dev、APP_DATABASE_PROFILE=mysql时,自动激活dev、mysql两个Profile - 只设置其中一个环境变量时,比如只设置
APP_PROFILE=test,未设置的变量自动使用默认值,最终激活test、postgres两个Profile
注意点
- SmallRye Config原生适配大写+下划线格式的环境变量,不需要额外做命名转换,
APP_PROFILE、APP_DATABASE_PROFILE这类命名的环境变量可以直接被识别 - 不要尝试通过自定义配置节点绑定Profile列表,Quarkus读取激活Profile的时机早于用户自定义配置的绑定阶段,自定义的配置节点不会被框架当作激活Profile的依据
内容的提问来源于stack exchange,提问作者Dmirii Berrington
相关产品推荐
相关产品推荐

