我正在尝试为生产设置spring-cloud-config-server。 我想读取多个git仓库,所以我在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)本身的某个配置文件中选择其他回购配置?
答案 0 :(得分:0)
Spring Cloud Config Server提供了具有多个存储库的配置,可以像我们对一个git repo一样通过url访问它们。配置服务器将通过模式获取每个配置,因此路径中的标签{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的存储库,因为我们没有任何映射到该应用程序的模式,所以配置服务器将使用默认应用程序,现在,如果我们指定了映射到应用程序fooapp中的模式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应用程序的所有文件中。响应顺序表示文件的层次结构是列表中优先级最高的文件。