Конфигурационные файлы Yml "Наследование" с загрузкой Spring

Я не мог найти прямой ответ онлайн.

Yml файлы Spring Boot "наследуют" друг от друга? Я имею в виду, если у меня есть:application.yml у которого есть

server:
  port: 80
  host: foo

а также application-profile1.yml который имеет только

server:
  port: 90

Так что, если я начну свой Spring Boot с profile1 в качестве активного профиля, я также буду иметь server.host свойство установлено в foo?

1 ответ

Решение

Да, application.yml файл имеет более высокий приоритет над любым application-{profile}.yml файл. Свойства из специфичного для профиля файла yml переопределяют значения по умолчанию application.yml Файл и свойства, которые не существуют в профиле yml, будут загружены из файла по умолчанию. Это относится к .properties файлы, а также bootstrap.yml или же bootstrap.properties,

Документация Spring Boot упоминает об этом в 72.7 Изменение конфигурации в зависимости от параграфа среды:

В этом примере порт по умолчанию - 9000, но если активен профиль развития "Spring", то порт - 9001, а если активен "production", то он равен 0.

Документы YAML объединяются в том порядке, в котором они встречаются (поэтому более поздние значения переопределяют более ранние).

Чтобы сделать то же самое с файлами свойств, вы можете использовать application-${profile}.properties указать специфичные для профиля значения.

Вот мое решение.

Предполагать application.yml:

spring:
  profiles: default-server-config

server:
  port: 9801
  servlet:
    context-path: '/ctp'

Если я хочу использовать default-server-config профиль и использовать порт 8080 в моем application-dev.yml

application-dev.yml:

spring:
  profiles:
    include:
      - default-server-config
      - dev-config

---
spring:
  profiles: dev-config
  
server:
  port: 8080

потом -Dspring.profiles.active=dev

Другие вопросы по тегам