Externalise - конфигурация нескольких репозиториев Git на сервере Spring Cloud
Я пытаюсь настроить spring-cloud-config-server для производства. Я хочу прочитать несколько репозиториев git, поэтому я предоставляю следующую конфигурацию в application.yml config-server, размещенного в src / main / resources
spring:
application:
name: config-server
profiles:
active: git
cloud:
config:
server:
git:
uri: https://somedomain.com/project1/project1.git
username: project1user
password: project1password
repos:
project2:
pattern: project2/*
uri: https://somedomain.com/project2/project2.git
username: project2user
password: project2password
searchPaths:
- 'src/main/resources'
Теперь я хочу перенести эту конфигурацию сервера конфигурации во внешний вид.
Я мог бы предоставить свойства основного репозитория git (https://somedomain.com/project1/project1.git) с помощью переменных среды, например следующих
spring.cloud.config.server.git.uri=https://somedomain.com/project1/project1.git
spring.cloud.config.server.git.username=project1user
spring.cloud.config.server.git.password=project1password
Но как насчет других свойств репозитория git. Передача сложной структуры, похожей на карту, была бы довольно утомительной, если бы она передавалась через переменные среды.
Как лучше всего передать эту конфигурацию другим репозиториям? Передача некоторой конфигурации в качестве переменной среды имеет и другие недостатки, например, эти свойства не могут быть обновлены во время выполнения.
Есть ли вероятность того, что дополнительная конфигурация репо будет выбрана из некоторого файла конфигурации в самом главном git (https://somedomain.com/project1/project1.git)?
1 ответ
Spring Cloud Config Server предоставляет конфигурацию с несколькими репозиториями, и к ним можно получить доступ по URL-адресу, как мы делаем для одного репозитория git. Сервер конфигурации будет выбирать каждую конфигурацию по шаблону, поэтому ваша метка {application} в пути будет ключом к поиску правильного репозитория. Как и в моем случае:
весна: облако: конфигурация: сервер: git: uri: https://github.com/solivaf/config-properties-foo
Теперь мы должны добавить наши дополнительные репозитории, как вы можете видеть ниже:
весна: облако: конфигурация: сервер: git: uri: https://github.com/solivaf/config-properties-foo репозитории: appFoo: шаблон: app-foo uri: https://github.com/solivaf/config-properties-bar
Перезагрузите сервер конфигурации и выполните указанные ниже запросы.
$ curl localhost:8080/fooapp/prod
{
"name": "fooapp",
"profiles": [
"prod"
],
"label": null,
"version": "8686fb74f9af0aead98bd20d6e20e84a37028781",
"state": null,
"propertySources": [
{
"name": "https://github.com/solivaf/config-properties-foo/application-prod.yml",
"source": {
"bar.foo": "testProdPropertiesYml"
}
},
{
"name": "https://github.com/solivaf/config-properties-foo/application.yml",
"source": {
"bar.foo": "testPropertiesYml"
}
}
]
}
Теперь мы можем увидеть репозиторий, используемый для приложения fooapp, поскольку у нас нет шаблона, сопоставленного с этим приложением, сервер конфигурации будет использовать приложение по умолчанию, теперь, если мы укажем шаблон app-foo, который отображается в нашем сервере конфигурации файл свойств, мы должны получить в ответ другой репозиторий.
$ curl localhost:8080/app-foo/prod
{
"name": "app-foo",
"profiles": [
"prod"
],
"label": null,
"version": "f34ced0565042be4cf87c937c1dab2703e0b8ed2",
"state": null,
"propertySources": [
{
"name": "https://github.com/solivaf/config-properties-bar/app-foo-prod.yml",
"source": {
"foo.bar": "testProdPropertiesYml"
}
},
{
"name": "https://github.com/solivaf/config-properties-bar/application-prod.yml",
"source": {
"foo.bar": "testProdPropertiesYml"
}
},
{
"name": "https://github.com/solivaf/config-properties-bar/application.yml",
"source": {
"foo.bar": "testPropertiesYml"
}
}
]
}
Теперь у нас есть правильный репозиторий, который был отображен в нашем файле свойств и во всех файлах, представляющих наше приложение app-foo. Порядок ответов представляет собой иерархию файла, имеющего приоритет перед первым файлом в списке.