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

Quarkus从application.properties注入自定义属性为null如何解决?

问题原因

CDI(Quarkus使用的依赖注入框架)的字段注入逻辑是在类的实例化完成之后才执行的,构造方法执行时,注入流程还未触发,因此你声明的API_KEY字段此时还未被赋值,必然为null。你调整字段上的@Inject注解无法解决问题,本质是字段注入的执行时机晚于构造方法执行时机。

修复方案

方案1:使用构造方法注入(推荐)

直接将配置属性作为构造方法的参数传入,依赖注入容器会在实例化类时自动把配置值注入到构造参数中,你可以直接在构造方法中使用该值,示例代码如下:

@ApplicationScoped
public class EmailConfig {

    private final String API_KEY;
    private SendGrid sendGrid;
    private Request request;

    // 单构造方法场景下可省略@Inject注解
    public EmailConfig(@ConfigProperty(name = "sendgrid.apikey") String apiKey) {
        this.API_KEY = apiKey;
        sendGrid = new SendGrid(API_KEY);
        request = new Request();
    }
}

方案2:使用@PostConstruct初始化方法

你可以保留原有字段注入的写法,将依赖注入字段的初始化逻辑放到@PostConstruct注解标注的方法中,该方法会在字段注入完成后被容器自动调用,此时字段已经完成赋值:

@ApplicationScoped
public class EmailConfig {

    @Inject
    @ConfigProperty(name = "sendgrid.apikey")
    String API_KEY;

    private SendGrid sendGrid;
    private Request request;

    public EmailConfig() {
        // 构造方法中不执行依赖注入字段相关的初始化逻辑
    }

    @PostConstruct
    public void init() {
        sendGrid = new SendGrid(API_KEY);
        request = new Request();
    }
}

内容的提问来源于stack exchange,提问作者Dan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:04