Как прочитать переменную окружения в Quarkus - PullRequest
1 голос
/ 31 января 2020

Я пытаюсь прочитать переменную окружения в моем приложении Quarkus, используя @ConfigProperty, но мне не удалось это сделать. Я подумал, что достаточно указать только имя переменной, но она не работает:

@ConfigProperty(name = "MY_ENV_VAR")
String envVar;

Я также пытался указать свойство в application.properties

my.var=${MY_ENV_VAR:defaultValue}

и читать как

@ConfigProperty(name = "my.var")
String myVar;

но переменная всегда равна нулю.

Я что-то пропустил? Как правильно читать переменные среды в Quarkus?
Я использую Quarkus 1.2.0.Final

1 Ответ

0 голосов
/ 31 января 2020

Я и мои коллеги нашли источник проблемы. Я пытался прочитать поле, помеченное @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

Итак, если вы хотите использовать свойства конструктора или переменные среды в конструкторе, вы должны вставить его в аргументы конструктора.

...