Externalise - spring cloud config server 多个 git repo 配置
Posted
技术标签:
【中文标题】Externalise - spring cloud config server 多个 git repo 配置【英文标题】:Externalise - spring cloud config server multiple git repo configuration 【发布时间】:2020-04-22 08:54:49 【问题描述】:我正在尝试为生产设置一个 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 配置?
【问题讨论】:
【参考方案1】:Spring Cloud Config Server 提供了一个包含多个存储库的配置,它们可以通过 url 访问,就像我们为一个 git repo 所做的那样。配置服务器将通过模式获取每个配置,因此路径中的标签 application 将是找到正确存储库的关键。就像我一样:
弹簧: 云: 配置: 服务器: 混帐: uri:https://github.com/solivaf/config-properties-foo
现在我们应该添加额外的存储库,如下所示:
弹簧: 云: 配置: 服务器: 混帐: URI:https://github.com/solivaf/config-properties-foo 回购: 应用程序: 模式: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 映射到我们的config-server 属性文件,我们应该得到另一个存储库作为响应。
$ 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 应用程序的所有文件中。响应顺序表示文件的层次结构,列表中第一个文件的优先级最高。
【讨论】:
@borchvm 如何为文件系统后端添加多个搜索位置?以上是关于Externalise - spring cloud config server 多个 git repo 配置的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud总结29.Zuul的FallBack回退机制
Spring Cloud Alibaba - 13 OpenFeign应用篇