Spring Cloud Config-从Git读取多个属性文件

时间:2019-04-16 12:08:44

标签: spring spring-boot spring-cloud spring-cloud-config

我正在使用Spring Boot 2,每个服务都有一个application.yml。每个application.yml定义每个配置文件的公共属性以及特定属性。我想继续进行Spring Cloud Config。

我希望每个服务都可以从4个属性文件中读取属性,这意味着对于配置文件为“ dev”的名为“ myService”的服务,我希望能够从中读取:

  • config / myService / application-dev.yml(此服务和此配置文件的特定配置)
  • config / myService / application.yml(无论使用哪个配置文件,此服务的特定配置)
  • config / application-dev.yml(无论使用哪种服务,开发配置文件的特定配置)
  • config / application.yml(共享配置,无论使用哪种服务,无论使用哪种配置文件)

我创建了一个目录配置。每个服务都有子目录。

但是,当myService启动时,仅从git中检索了2个文件。通过EncryptablePropertySourceConverter检索第三个文件。  缺少的文件是config / application.yml。请参见下面的myService日志:

 10:27:42.535 [main] INFO  o.s.c.b.c.PropertySourceBootstrapConfiguration - Located property source: 
 10:54:20.449 [main] INFO  o.s.c.b.c.PropertySourceBootstrapConfiguration - Located property source: CompositePropertySource {name='configService', 
 propertySources=[MapPropertySource {name='configClient'}, 
 MapPropertySource {name='ssh://git@xxx:7999/qi/athena.git/config/myService/application-dev.yml'}, 
 MapPropertySource {name='ssh://git@xxx:7999/qi/athena.git/config/myService/application.yml'}]}
 ...
 10:54:27.141 [main] INFO  c.u.j.EncryptablePropertySourceConverter - Converting PropertySource applicationConfig: [file:./config/application-dev.yml] 
 [org.springframework.boot.env.OriginTrackedMapPropertySource] to EncryptableMapPropertySourceWrapper
 ...
 10:55:01.469 [main] DEBUG o.s.c.c.c.ConfigServicePropertySourceLocator - Environment myService has 2 property sources with 6 properties.
10:55:01.469 [main] INFO  o.s.c.b.c.PropertySourceBootstrapConfiguration - Located property source: CompositePropertySource {name='configService', 
propertySources=[MapPropertySource {name='configClient'}, 
MapPropertySource {name='ssh://git@xxx:7999/qi/athena.git/config/myService/application-dev.yml'}, 
MapPropertySource {name='ssh://git@xxx:7999/qi/athena.git/config/myService/application.yml'}

配置服务-application.yml:

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: ssh://git@xxx:7999/qi/athena.git
          clone-on-start: true
          search-paths: 'config/{application}'
          default-label: 'feature/ConfigServerDesign'

myService-bootstrap.yml

spring:
  application:
    name: myService
  cloud:
      config:
        uri: http://localhost:8888
        label: 'feature/ConfigServerDesign'

读取两个文件config / myService / application.yml和config / myService / application-dev。

还读取共享的config / application.yml。 https://cloud.spring.io/spring-cloud-config/multi/multi__spring_cloud_config_server.html#_sharing_configuration_with_all_applications 但是,未读取文件config / application.yml。

config / application.yml和config / myService / application.yml之间是否存在冲突?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

问题是未读取文件的内容。 如果错误地有一个属性:

spring.profiles: some_profile

然后未读取application.yml文件。

例如,相同:

spring.profiles: prod

位于application-uat.yml文件中。

我猜这是忽略此类文件的正确行为,因为这是不一致或冲突的。 但是,在这种情况下,错误或警告消息应该有所帮助,而不是静默忽略文件。