Чтение переменной среды в SpringBootApplication

У меня есть переменная окружения RESOURCES_FOLDER. Что я хочу прочитать в классе внутри моего приложения Springboot

@Value("${RESOURCES_FOLDER}")
private static String resourcesFolder;

Когда я пытаюсь напечатать значение, оно дает null вместо того, чтобы печатать фактический путь в моей переменной среды. Может ли кто-нибудь помочь мне с этим ??

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
0
94
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Spring не позволяет вводить значения в статические поля. У вас есть несколько вариантов обойти это ограничение:

  1. Создайте нестатический сеттер. Это не очень хороший подход, так как resourceFolder будет общим для всех экземпляров класса. Тем не менее, вы должны быть в состоянии достичь этого:
public class SomeClass {
    ...

    public static String resourcesFolder;

    @Value("${RESOURCES_FOLDER}")
    public void setResourcesFolder(String resourcesFolder) {
        this.resourcesFolder = resourcesFolder;
    }

    ...
}
  1. Объявите поле как нестатическое. Для этого спросите себя: вам действительно нужно, чтобы поле было статичным? Большую часть времени нестатическое поле достаточно.
  2. Создайте отдельный класс @ConfigurationProperties, объявите поля как приватные нестатические, создайте для него геттеры/сеттеры и внедрите класс везде, где вам нужна переменная. Это очень компонуемый и тестируемый подход, который я бы порекомендовал, особенно если у вас довольно много связанных свойств.

В качестве альтернативы, пожалуйста, обратитесь к другим подобным вопросам: 1, 2.

Добавьте имя переменной среды в файл application.properties:

RESOURCE_FOLDER_PATH =${RESOURCES_FOLDER}

Здесь RESOURCES_FOLDER — имя вашей переменной окружения.

Затем получите доступ к переменной среды в классе Java, используя аннотацию @value.

public class AccessEnvironmentVariable{

@Value("${RESOURCE_FOLDER_PATH}")
private String RESOURCE_FOLDER;

private void displayEnvironmentVariable(){
    System.out.println("Your environment variable Resource Folder: "+RESOURCE_FOLDER);
}

}

Другие вопросы по теме