在 quarkus 中从 application.properties 注入自定义 属性

Injecting a custom property from application.properties in quarkus

按照指南 here,我正在尝试注入我在 application.properties 中定义的自定义 属性。 道具定义为 sendgrid.apikey=key 然后我的 class 是;

@ApplicationScoped
public class EmailConfig {

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

    private SendGrid sendGrid;
    private Request request;

    public EmailConfig() {
        sendGrid = new SendGrid(API_KEY);
        request = new Request();
    }

当我点击构造函数的第一行时,我希望 API_KEY 是 application.properties 文件中的值,但它是 null。我不知道为什么!我在有和没有 @Inject 注释的情况下都试过了。

有什么想法吗?

你的期望是错误的。有一些技巧可以在不调用构造函数的情况下创建 class 的实例,但它们通常并不完全可靠,因此 Quarkus 所做的就是您手动执行的操作:创建一个实例,它调用构造函数。实例存在后才能注入字段

你可以做的是将对象作为参数注入构造函数:

@ApplicationScoped
public class EmailConfig {

    private SendGrid sendGrid;
    private Request request;

    @Inject
    public EmailConfig(@ConfigProperty(name = "sendgrid.apikey") String API_KEY) {
        sendGrid = new SendGrid(API_KEY);
        request = new Request();
    }