Свойство среды загрузки Spring возвращает значение null

#spring-boot

#spring-boot

Вопрос:

У меня есть приложение spring boot 2. Я пытаюсь получить доступ к свойствам файла свойств моего приложения через среду spring, а также свойство @Value, ни одно из них не работает.

 @Autowired
Environment env;

logger.info(env.getProperty("app.environment"));


@Value("${app.environment}")
private String _env;

logger.info(_env);
  

введите описание изображения здесь

app.environment=LOCAL

Похоже, что spring boot вообще не обнаруживает файл application.properties.

Что я здесь делаю не так, заранее спасибо

Комментарии:

1. можете ли вы привести полный пример или свой класс? я хотел бы увидеть структуру вашего полного класса

2. вы аннотировали свой класс с @Component помощью , @Service , @Configuration или etc ?

Ответ №1:

Если введенное свойство равно null, это, скорее всего, означает, что ваш компонент еще не создан. Spring boot вводит значения в свойства компонента только после создания компонента.

Вот простой эксперимент, демонстрирующий это поведение:

 @Value("${spring.application.name}")
private String instanceApplicationName;

public UserController(@Value("${spring.application.name}") String appNameInConstructor)  {
    System.out.println("Constructor app name: "   appNameInConstructor);
    System.out.println("Instance application name: "   this.instanceApplicationName);
}
  

Какое свойство будет иметь значение null? instanceApplicationName или appNameInConstructor?

Да, это свойство instanceApplicationName имеет значение null, потому что конструктор вызывается первым, а свойство экземпляра еще не инициализировано. appNameInConstructor правильно регистрирует имя приложения.

Итак, где вы ссылаетесь на введенные свойства и как вы их вводите, оба имеют значение.

Вы можете проверить весь проект здесь: https://github.com/nkumashi/springboot-webmvc-demo .