Quarkus应用注入列表型动态Map配置,smallrye-config是否支持?
smallrye-config 完全支持你期望的 YAML 配置格式注入,无需使用分号拼接的配置形式再做后置处理,具体实现步骤如下:
1. 定义配置映射接口
使用 Quarkus 提供的 @ConfigMapping 注解定义配置结构,直接匹配你给出的 YAML 格式:
import io.smallrye.config.ConfigMapping; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @ConfigMapping(prefix = "app") public interface AppConfig { // 直接匹配YAML中的数组结构,支持任意数量的动态key List<ExampleEntry> example(); interface ExampleEntry { String key(); List<String> values(); } // 内置默认方法直接转换为你需要的Map结构,无需额外处理 default Map<String, List<String>> getExampleAsMap() { return example().stream() .collect(Collectors.toMap(ExampleEntry::key, ExampleEntry::values)); } }
2. 注入使用
直接在需要使用配置的类中注入上述配置接口即可:
import jakarta.enterprise.context.ApplicationScoped; @ApplicationScoped public class ExampleService { private final AppConfig appConfig; // 构造方法注入 public ExampleService(AppConfig appConfig) { this.appConfig = appConfig; } public void doSomething() { // 直接获取转换后的动态Map结构 Map<String, List<String>> exampleMap = appConfig.getExampleAsMap(); // 示例:获取KeyExample对应的配置列表 List<String> keyExampleValues = exampleMap.get("KeyExample"); } }
注意事项
- 正常创建的 Quarkus 项目默认已集成 smallrye-config 能力,无需额外引入依赖
- 所有配置解析逻辑由 smallrye-config 原生实现,不需要你手动处理配置加载、格式转换的操作
- 新增配置项时只需要修改YAML文件,不需要调整配置类代码,完全支持动态key扩展
内容的提问来源于stack exchange,提问作者user0000001
相关产品推荐
相关产品推荐

