如何在Kotlin自定义类中读取Quarkus的配置项
问题根源
@ConfigProperty 是MicroProfile Config提供的依赖注入注解,仅对Quarkus CDI容器托管的Bean生效。你手动通过Config()构造的实例属于普通对象,框架不会对其进行属性注入处理,因此foo属性始终为null。
解决方案
提供两种常用实现方式:
方式1:将配置类注册为CDI Bean(推荐)
- 给自定义配置类添加作用域注解,交由Quarkus容器管理:
import javax.enterprise.context.ApplicationScoped import org.eclipse.microprofile.config.inject.ConfigProperty @ApplicationScoped // 声明为应用级单例Bean,由Quarkus托管 class Config { // 配置确定存在时建议用lateinit避免空处理,需要兼容空可以用String? @ConfigProperty(name = "test.env") lateinit var foo: String }
- 测试类中通过
@Inject注入配置Bean,禁止手动实例化:
import javax.inject.Inject @QuarkusTest class Test { @Inject lateinit var config: Config @Test fun test(){ println(config.foo) } }
方式2:主动拉取配置(适合非托管类场景)
如果你的配置类不需要作为Bean托管,可以直接通过ConfigProvider主动读取配置,手动实例化也能正常取值:
import org.eclipse.microprofile.config.ConfigProvider class Config { val foo: String = ConfigProvider.getConfig().getValue("test.env", String::class.java) // 兼容空值可以用getOptionalValue: // val foo: String? = ConfigProvider.getConfig().getOptionalValue("test.env", String::class.java).orElse(null) }
额外注意事项
你使用的1.10.3.Final属于较早期的Quarkus版本,Kotlin开发时建议同时引入io.quarkus:quarkus-kotlin依赖,避免final类无法代理、注解无法识别等兼容性问题。
内容的提问来源于stack exchange,提问作者bennex
相关产品推荐
相关产品推荐

