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. Порядок ответов представляет собой иерархию файла, имеющего приоритет перед первым файлом в списке.

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