Spring Boot: конфигурация, файлы свойств приложения

SpringApplication загружает свойства из файлов application.properties в следующих местах и ​​добавляет их в Spring Environment:

  1. Подкаталог /config текущего каталога
  2. Текущий каталог
  3. Пакет /config в пути к классам (classpath)
  4. Корень пути к классам (classpath root)

Список упорядочен по приоритету (свойства, определенные в местоположениях выше в списке, переопределяют свойства, определенные в нижних местоположениях).

Вы также можете использовать файлы YAML ('.yml') в качестве альтернативы '.properties'.

Если вам не нравится application.properties в качестве имени файла конфигурации, вы можете переключиться на другое имя файла, указав свойство среды spring.config.name. Вы также можете сослаться на явное местоположение, используя свойство среды spring.config.location (которое представляет собой разделенный запятыми список расположений каталогов или путей к файлам). В следующем примере показано, как указать другое имя файла:

$ java -jar myproject.jar --spring.config.name=myproject

В следующем примере показано, как указать два местоположения:

$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties

spring.config.name и spring.config.location используются очень рано, чтобы определить, какие файлы должны быть загружены. Они должны быть определены как свойство среды (обычно это переменная среды ОС, системное свойство или аргумент командной строки).

Если spring.config.location содержит каталоги (в отличие от файлов), они должны заканчиваться на / (и, во время выполнения, дополняться именами, сгенерированными из spring.config.name перед загрузкой, включая специфичные для профиля имена файлов). Файлы, указанные в spring.config.location, используются как есть, без поддержки специфичных для профиля вариантов и переопределяются любыми специфическими для профиля свойствами.

Местоположения конфигурации ищутся в обратном порядке. По умолчанию настроенными местами являются classpath:/,classpath:/config/,file:./,file:./config/. Результирующий порядок поиска следующий:

  1. file:./config/
  2. file:./
  3. classpath:/config/
  4. classpath:/

Когда пользовательские местоположения конфигурации настраиваются с использованием spring.config.location, они заменяют местоположения по умолчанию. Например, если spring.config.location настроен со значением classpath:/custom-config/,file:./custom-config/, порядок поиска становится следующим:

  1. file:./custom-config/
  2. classpath:/custom-config/

Кроме того, когда пользовательские местоположения конфигурации настраиваются с использованием spring.config.additional-location, они используются в дополнение к местоположения по умолчанию. Дополнительные местоположения ищутся перед местоположениями по умолчанию. Например, если настроены дополнительные местоположения classpath:/custom-config/,file:./custom-config/, порядок поиска становится следующим:

  1. file:./custom-config/
  2. classpath:/custom-config/
  3. file:./config/
  4. file:./
  5. classpath:/config/
  6. classpath:/

Этот порядок поиска позволяет указать значения по умолчанию в одном файле конфигурации, а затем выборочно переопределить эти значения в другом. Вы можете указать значения по умолчанию для своего приложения в application.properties (или любом другом базовом имени, которое вы выберете при помощи spring.config.name) в одном из местоположений по умолчанию. Эти значения по умолчанию могут быть переопределены во время выполнения с помощью другого файла, расположенного в одном из пользовательских местоположений.

Если вы используете переменные окружения, а не системные свойства, большинство операционных систем не допускают имен ключей, разделенных точками, но вместо этого вы можете использовать подчеркивание (например, SPRING_CONFIG_NAME вместо spring.config.name).

Если ваше приложение запускается в контейнере, то вместо переменных окружения или системных свойств можно использовать параметры JNDI (в java:comp/env) или параметры инициализации контекста сервлета.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки