«1. Обзор
Файлы свойств — это распространенный метод, который мы можем использовать для хранения информации, относящейся к проекту. В идеале мы должны держать его вне упаковки, чтобы иметь возможность вносить изменения в конфигурацию по мере необходимости.
В этом кратком руководстве мы рассмотрим различные способы загрузки файла свойств из места за пределами jar в приложении Spring Boot.
2. Использование местоположения по умолчанию
По соглашению, Spring Boot ищет внешний файл конфигурации — application.properties или application.yml — в 4 предопределенных местоположениях в следующем порядке приоритета:
-
Подкаталог /config текущего каталога Текущий каталог Путь к классам /config Пакет Корень пути к классам
Таким образом, будет загружено свойство, определенное в 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. Программно ~ ~~ Или, если нам нужен программный доступ, мы можем зарегистрировать bean-компонент PropertySourcesPlaceholderConfigurer:
Здесь мы использовали PropertySourcesPlaceholderConfigurer для загрузки свойств из пользовательского местоположения.
public PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() {
PropertySourcesPlaceholderConfigurer properties =
new PropertySourcesPlaceholderConfigurer();
properties.setLocation(new FileSystemResource("/Users/home/conf.properties"));
properties.setIgnoreResourceNotFound(false);
return properties;
}
7. Исключение файла из Fat Jar
Плагин Maven Boot автоматически включит все файлы из каталога src/main/resources в пакет jar.
Если мы не хотим, чтобы файл был частью jar, мы можем исключить его с помощью простой конфигурации:
В этом примере мы отфильтровали файл conf.properties из входит в полученную банку.
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/conf.properties</exclude>
</excludes>
</resource>
</resources>
</build>
8. Заключение
Как мы видим, среда Spring Boot сама позаботится о внешней конфигурации за нас.
Часто нам просто нужно поместить значения свойств в правильные файлы и места, но мы также можем использовать Java API Spring для большего контроля.
Как всегда, полный исходный код примеров доступен на GitHub.
«