You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin自定义类中读取Quarkus的配置项

问题根源

@ConfigProperty 是MicroProfile Config提供的依赖注入注解,仅对Quarkus CDI容器托管的Bean生效。你手动通过Config()构造的实例属于普通对象,框架不会对其进行属性注入处理,因此foo属性始终为null。


解决方案

提供两种常用实现方式:

方式1:将配置类注册为CDI Bean(推荐)

  1. 给自定义配置类添加作用域注解,交由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
}
  1. 测试类中通过@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:48:01