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