#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 .