在 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();
}
按照指南 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();
}