0

我正在尝试为生产设置一个 spring-cloud-config-server。我想读取多个 git repos,所以我在 src/main/resources 中的 config-server 的 application.yml 中提供以下配置

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 repo ( 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 repo 属性呢?如果通过环境变量传递复杂的类似地图的结构将非常乏味。

传递其他存储库的这种配置的最佳方法是什么?将某些配置作为环境变量传递还有其他缺点,例如无法在运行时刷新这些属性。

是否有可能从主 git (https://somedomain.com/project1/project1.git)本身的某些配置文件中选择额外的 repo 配置?

4

1 回答 1

0

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 repos:appFoo:模式:app-foo uri:https ://github.com/solivaf/config-属性栏

重新启动配置服务器并执行以下请求。

    $ 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 应用程序的所有文件中。响应顺序表示文件的层次结构,即列表中第一个文件的优先级最高。

于 2020-02-12T12:24:33.260 回答