Spring 云配置服务器中配置文件的模式匹配
Pattern matching for profile in Spring Cloud Config Server
上下文
我正在尝试使用 Spring Cloud Config Server 中的模式匹配功能为我们的应用程序分离配置信息。我已经使用 属性 文件 floof.yaml
为 "production" 环境创建了一个回购协议。我用 属性 文件 floof-dev.yaml
.
为 "development" 环境创建了一个回购协议
我的服务器配置:
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”和来自该源的值,但实际结果是 "production" 文件和内容(就像我取了 .../floof/prod
一样。
我的问题
- 我对行为的期望不正确吗?我假设不是,因为 "Git backend" 部分的 documentation 中有一个示例表明按配置文件分隔是一回事。
- 我的服务器配置是否错误地指定了 "development" 存储库?我在服务器实例中调高了日志记录的详细程度,但在错误配置方面没有发现任何需要引起注意的地方。
- 属性 文件是否遵循我未遵循的命名约定?
我遇到了同样的问题。这是我解决的方法::
另外,请检查您是否使用 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
或
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
我观察到的另一个问题是,如果我必须将模式数组提到为 '- */development'
,我会在 yml 文件上遇到编译错误 - 请注意连字符后的 space(这是为了表明它可以将多个值作为数组保存)并以 '*/development'
开头并出现错误:预期的字母或数字字符,但已找到但已找到 /
repos:
development:
pattern:
- */development
- */staging
上下文
我正在尝试使用 Spring Cloud Config Server 中的模式匹配功能为我们的应用程序分离配置信息。我已经使用 属性 文件 floof.yaml
为 "production" 环境创建了一个回购协议。我用 属性 文件 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”和来自该源的值,但实际结果是 "production" 文件和内容(就像我取了 .../floof/prod
一样。
我的问题
- 我对行为的期望不正确吗?我假设不是,因为 "Git backend" 部分的 documentation 中有一个示例表明按配置文件分隔是一回事。
- 我的服务器配置是否错误地指定了 "development" 存储库?我在服务器实例中调高了日志记录的详细程度,但在错误配置方面没有发现任何需要引起注意的地方。
- 属性 文件是否遵循我未遵循的命名约定?
我遇到了同样的问题。这是我解决的方法::
另外,请检查您是否使用 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
或
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
我观察到的另一个问题是,如果我必须将模式数组提到为 '- */development'
,我会在 yml 文件上遇到编译错误 - 请注意连字符后的 space(这是为了表明它可以将多个值作为数组保存)并以 '*/development'
开头并出现错误:预期的字母或数字字符,但已找到但已找到 /
repos:
development:
pattern:
- */development
- */staging