Конфигурационные файлы 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