Я и мои коллеги нашли источник проблемы. Я пытался прочитать поле, помеченное @ConfigProperty
в конструкторе, но свойства вводятся только после вызова конструктора.
Я приведу рабочий пример:
package org.acme.config;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import javax.enterprise.context.ApplicationScoped;
@ApplicationScoped
public class EnvGreetingService {
private final String varA;
@ConfigProperty(name = "ENV_VAR_B")
String varB;
public EnvGreetingService(@ConfigProperty(name = "ENV_VAR_A") String varA) {
System.out.println("constructor varA=" + varA);
System.out.println("constructor varB=" + varB);
this.varA = varA;
}
public void greetWithEnvVar() {
System.out.println("method varA=" + varA);
System.out.println("method varB=" + varB);
}
}
Примечание: не требуется отображать переменные окружения в application.properties
И вывод консоли будет:
constructor varA=a
constructor varB=null
method varA=a
method varB=b
Итак, если вы хотите использовать свойства конструктора или переменные среды в конструкторе, вы должны вставить его в аргументы конструктора.