我正在尝试使用Spring Cloud Config Server中的模式匹配功能来分离应用程序的配置信息。我使用属性文件floof.yaml
为“生产”环境创建了一个仓库。我使用属性文件floof-dev.yaml
为“开发”环境创建了一个仓库。
我的服务器配置:
spring:
application:
name: "bluemoon"
cloud:
config:
server:
git:
uri: file://${user.home}/tmp/prod
repos:
development:
pattern:
- \*/dev
uri: file://${user.home}/tmp/dev
启动服务器实例后,我可以使用curl成功检索配置内容,并可以通过引用“source”元素以及属性本身的值来验证服务的内容。
当我获取http://localhost:8080/floof/prod
时,我希望看到源“$ HOME / tmp / prod / floof.yaml”以及该来源的值,并且实际结果符合该预期。
当我获取http://localhost:8080/floof/dev
时,我希望看到源“$ HOME / tmp / dev / floof-dev.yaml”以及该源的值,但实际结果是“生产”文件和内容(就像我取代.../floof/prod
一样。
答案 0 :(得分:2)
我有同样的问题。以下是我如何解决:: spring cloud config pattern match for profile
另外,请检查您是否使用Brixton.M5版本。
在对PatternMatching源代码进行一些调试之后,我就是这样解决问题的方法:您可以选择以下两种方法之一。
application.yml
server:
port: 8888
spring:
cloud:
config:
server:
git:
uri: ssh://xxxx@github/sample/cloud-config-properties.git
repos:
development:
pattern: '*/development' ## give in quotes
uri: ssh://git@xxxgithub.com/development.git
OR
development:
pattern: xx*/development,*/development ##since it is not allowed to have a value starting with a wildcard( '*' )after pattern I first gave a generic matching but the second value is */development. Since pattern takes multiple values, the second pattern will match with the profile.
uri: ssh://git@xxxgithub.com/development.git
模式:*/development
。yml文件错误 - 预期字母或数字字符,但找到/
。
未识别配置文件模式git repo的原因是:尽管spring允许模式的多个数组值以' - '开头。在yml文件中,模式匹配器正在使用' - '作为要匹配的字符串。即它正在寻找模式'-*/development'
而不是'*/development'
。
repos:
development:
pattern:
-*/development
-*/staging
我观察到的另一个问题是,我在yml文件上遇到编译错误,如果我不得不提到模式数组为'- */development'
- 在连字符后面注意空格(这意味着它可以保存多个值为数组)并以带有错误的'*/development'
开头:预期的字母或数字字符,但找不到/
repos:
development:
pattern:
- */development
- */staging