Я хочу получить доступ к значениям, указанным application.properties
, например:
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log
userBucket.path=${HOME}/bucket
Я хочу получить доступ userBucket.path
к моей основной программе в приложении Spring Boot.
Environment
или через@ConfigurationProperties
@Configuration
классах, проблема хорошо проанализирована в следующем сообщении в блоге@Component
(или любой из его производных@Repository
, т.Другой способ - это инъекция
org.springframework.core.env.Environment
в ваш боб.источник
org.springframework.core.env.Environment
@ConfigurationProperties
может использоваться для отображения значений из.properties
(.yml
также поддерживаемых) в POJO.Рассмотрим следующий пример файла.
.properties
Employee.java
Теперь к значению свойств можно получить доступ с помощью автоматического подключения
employeeProperties
следующим образом.источник
src/main/resources
если вы не тестируете свой код из теста Spring.В настоящее время я знаю о следующих трех способах:
1.
@Value
Аннотацияnull
. Например, когда вы пытаетесь установить его вpreConstruct()
метод илиinit()
метод. Это происходит потому, что внедрение значения происходит после того, как класс полностью построен. Вот почему лучше использовать 3-й вариант.2.
@PropertySource
АннотацияPropertySouce
устанавливает значения из исходного файла свойств вEnvironment
переменную (в вашем классе), когда класс загружается. Таким образом, вы можете легко получить послесловие.3.
@ConfigurationProperties
Аннотация.Он инициализирует объект на основе данных свойства.
@ConfigurationProperties
определяет файл свойств для загрузки.@Configuration
создает компонент на основе переменных файла конфигурации.источник
spring.config.location
? # 2 все еще работает?Вы можете сделать это и так ....
Затем, где бы вы ни хотели прочитать данные из application.properties, просто передайте ключ методу getConfigValue.
источник
Environment
?spring.config.location
?Вы можете использовать
@Value
для загрузки переменных из,application.properties
если вы будете использовать это значение в одном месте, но если вам нужен более централизованный способ загрузки этих переменных@ConfigurationProperties
, это лучший подход.Кроме того, вы можете загружать переменные и автоматически приводить их, если вам нужны разные типы данных для проверки и бизнес-логики.
источник
Следуй этим шагам. 1: - создайте свой класс конфигурации, как показано ниже
2: - когда у вас есть класс конфигурации, введите переменную из конфигурации, где вам нужно.
источник
источник
Приложение может прочитать 3 типа значений из файла application.properties.
application.properties
файл класса
Если у вас нет свойства в application.properties, вы можете использовать значение по умолчанию
источник
Spring-boot позволяет нам использовать несколько методов для предоставления внешних конфигураций, вы можете попробовать использовать файлы application.yml или yaml вместо файла свойств и предоставить разные файлы свойств для настройки в соответствии с различными средами.
Мы можем разделить свойства для каждой среды на отдельные файлы yml под отдельными весенними профилями. Во время развертывания вы можете использовать:
указать, какой весенний профиль использовать. Обратите внимание, что файлы yml должны иметь имя, подобное
для них будет автоматически занято Springboot.
Ссылка: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties
Чтобы прочитать из application.yml или файла свойств:
Самый простой способ прочитать значение из файла свойств или yml - это использовать spring @value annotation.Spring автоматически загружает все значения из yml в среду Spring, поэтому мы можем напрямую использовать эти значения из среды, например:
Или другой метод, который предоставляет Spring для чтения строго типизированных bean-компонентов:
Соответствующий POJO для чтения yml:
Описанный выше метод хорошо работает с файлами yml.
Ссылка: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
источник
Для меня ничего из вышеперечисленного не сработало напрямую для меня. Я сделал следующее:
В дополнение к ответу @Rodrigo Villalba Zayas там я добавил
implements InitializingBean
в класси реализовал метод
Так это будет выглядеть
источник
Лучшие способы получения значений свойств используют.
1. Использование аннотации значения
2. Использование компонента Enviornment
источник
Лучше всего использовать
@Value
аннотацию, это автоматически назначит значение вашему объектуprivate Environment en
. Это уменьшит ваш код и будет легко фильтровать ваши файлы.источник
Есть два пути,
@Value
в своем классеИЛИ
@Configuration
класс, где вы можете добавить все свои@value
источник