首页 > 解决方案 > Spring Cloud Server 为同一个应用程序提供多个属性文件

问题描述

假设我有applicationA3 个属性文件:

-> applicationA
          - datasource.properties
          - security.properties
          - jms.properties

如何将所有属性移动到 Spring Cloud 配置服务器并将它们分开?

截至今天,我已经配置了只读取一个属性文件的配置服务器,因为这似乎是标准方式。配置服务器获取的这个文件似乎是通过使用 spring.application.name 来解决的。在我的情况下,它只会读取一个具有此名称的文件:

-> applicationA.properties

如何添加配置服务器要解析的其他文件?

标签: spring-cloud-config

解决方案


不可能按照您的要求进行。Spring Cloud Config Server 使用 NativeEnvironmentRepository,即:

{@link EnvironmentRepository} 的简单实现,它使用 SpringApplication 和通过普通协议定位的配置文件。生成的环境由使用应用程序名称作为配置文件主干 (spring.config.name) 和环境名称作为 Spring 配置文件定位的属性源组成。

见:https ://github.com/spring-cloud/spring-cloud-config/blob/master/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/ NativeEnvironmentRepository.java

因此,基本上每次客户端从 Config Server 请求属性时,它都会使用 SpringApplicationBuilder 创建 ConfigurableApplicationContext。它使用下一个配置属性启动:

String config = application;
if (!config.startsWith("application")) {
    config = "application," + config;
}
list.add("--spring.config.name=" + config);

因此,属性文件的可能名称将仅application.properties(or .yml)是请求配置的配置客户端应用程序名称 - 在您的情况下applicationA.properties

但是你可以“作弊”。在配置服务器配置中,您可以添加此类属性

spring:
  cloud:
    config:
      server:
        git:
          search-paths: '{application}, {application}/your-subdirectory'

在这种情况下,Config Server 将在少数目录中搜索相同的属性文件名,您可以使用子目录将属性分开。因此,通过上面的配置,您将能够从以下位置加载配置:

applicationA/application.properies
applicationA/your-subdirectory/application.properies

推荐阅读