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

Posted

技术标签:

【中文标题】Spring Cloud Config - 从 Git 读取多个属性文件【英文标题】:Spring Cloud Config - Reading multiple property files from Git 【发布时间】:2019-09-06 12:51:30 【问题描述】:

我使用的是 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】:

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

spring.profiles: some_profile

那么 application.yml 文件没有被读取。

如果您有例如,则相同:

spring.profiles: prod

在 application-uat.yml 文件中。

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

【讨论】:

以上是关于Spring Cloud Config - 从 Git 读取多个属性文件的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud config客户端未从配置服务器加载配置

spring cloud config svn仓库配置

从 Spring Boot 单元测试中排除 Spring Cloud Config Server

Spring Cloud搭建手册——Spring Cloud Config

从 Spring Cloud Config Server 获取配置时,Spring 配置文件未正确排序

如何从 Spring Cloud Config Server 读取多个配置文件