Перейти к основному содержимому

Файл свойств Spring Внешняя банка

· 3 мин. чтения

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 .