1. Обзор
Файлы свойств-это распространенный метод, который мы можем использовать для хранения информации, относящейся к конкретному проекту. В идеале мы должны держать его внешним по отношению к упаковке, чтобы иметь возможность вносить изменения в конфигурацию по мере необходимости.
В этом кратком руководстве мы рассмотрим различные способы загрузки файла свойств из расположения вне jar в приложении Spring Boot .
2. Использование местоположения по умолчанию
По соглашению Spring Boot ищет внешний конфигурационный файл – application . свойства или application.yml – в 4 заранее определенных местах в следующем порядке приоритета:
- A /config подкаталог текущего каталога
- Текущий каталог
- Путь к классу /config package
- Корень пути к классу
Поэтому будет загружено свойство, определенное в application.properties и помещенное в подкаталог config текущего каталога . Это также переопределит свойства в других местах в случае столкновения.
3. Использование командной строки
Если вышеприведенное соглашение не работает для нас, мы также можем настроить местоположение непосредственно в командной строке:
java -jar app.jar --spring.config.location=file:///Users/home/config/jdbc.properties
Мы также можем передать папку, в которой приложение будет искать файл:
java -jar app.jar --spring.config.name=application,jdbc --spring.config.location=file:///Users/home/config
Кроме того, альтернативным подходом является запуск приложения Spring Boot через плагин Maven . Там мы можем использовать параметр -D :
mvn spring-boot:run -Dspring.config.location="file:///Users/home/jdbc.properties"
4. Использование Переменных окружения
Или, скажем, мы не можем изменить команду запуска. Что здорово, так это то, что Spring Boot также будет читать переменные окружения SPRING_CONFIG_NAME и SPRING_CONFIG_LOCATION :
export SPRING_CONFIG_NAME=application,jdbc export SPRING_CONFIG_LOCATION=file:///Users/home/config java -jar app.jar
Обратите внимание, что файл по умолчанию все равно будет загружен. Но в случае коллизии свойств файл свойств конкретной среды имеет приоритет.
5. Использование Свойств приложения
Как мы видим, и то, и другое spring.config.name и spring.config.location свойства должны быть определены до запуска приложения, поэтому использование их в файле application.properties (или аналоге YAML) не будет иметь никакого эффекта.
Spring Boot изменил способ обработки свойств в версии 2.4.0 , и вместе с этим изменением команда представила новое свойство, позволяющее импортировать дополнительные конфигурационные файлы непосредственно из свойств приложения:
spring.config.import=file:./additional.properties,optional:file:/Users/home/config/jdbc.properties
6. Программно
Или, если нам нужен программный доступ, мы можем зарегистрировать PropertySourcesPlaceholderConfigurer bean:
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { PropertySourcesPlaceholderConfigurer properties = new PropertySourcesPlaceholderConfigurer(); properties.setLocation(new FileSystemResource("/Users/home/conf.properties")); properties.setIgnoreResourceNotFound(false); return properties; }
Здесь мы использовали PropertySourcesPlaceholderConfigurer для загрузки свойств из пользовательского местоположения.
7. Исключение файла из Толстой банки
Загрузочный плагин Maven автоматически включит все файлы в каталог src/main/resources в пакет jar.
Если мы не хотим, чтобы файл был частью jar, то мы можем просто настроить его, чтобы исключить его:
src/main/resources true **/conf.properties
В этом примере мы отфильтровали файл conf.properties от включения в результирующую банку.
8. Заключение
Как мы видим, фреймворк Spring Boot сам заботится о внешней конфигурации для нас.
Часто нам просто нужно поместить значения свойств в правильные файлы и местоположения, но мы также можем использовать Java API Spring для большего контроля.
Как всегда, полный исходный код примеров доступен на GitHub .