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 一样。

我的问题

  1. 我对行为的期望不正确吗?我假设不是,因为 "Git backend" 部分的 documentation 中有一个示例表明按配置文件分隔是一回事。
  2. 我的服务器配置是否错误地指定了 "development" 存储库?我在服务器实例中调高了日志记录的详细程度,但在错误配置方面没有发现任何需要引起注意的地方。
  3. 属性 文件是否遵循我未遵循的命名约定?

我遇到了同样的问题。这是我解决的方法::

另外,请检查您是否使用 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