Spring Cloud Config Server中配置文件的模式匹配

时间:2015-11-24 23:10:58

标签: config spring-cloud

上下文

我正在尝试使用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一样。

我的问题

  1. 我对行为的期望是否不正确?我假设没有,因为“Git后端”部分的documentation中有一个示例表明按配置文件分离是一件事。
  2. 我的服务器配置错误地指定了“开发”回购?我在服务器实例中调高了日志记录的详细程度,并且没有看到任何在错误配置方面引起注意的事物。
  3. 属性文件是否符合我未遵循的命名约定?

1 个答案:

答案 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