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

问题描述 投票:8回答:2

Spring云配置服务器支持读取名为${spring.application.name}.properties的属性文件。但是我的应用程序中有2个属性文件。

a.properties
b.properties

我可以让配置服务器读取这两个属性文件吗?

spring-cloud spring-cloud-config
2个回答
10
投票

在配置服务器正在查看的git或文件系统中重命名属性文件。

a.properties -> <your_application_name>.properties
a.properties -> <your_application_name>-<profile-name>.properties

例如,如果您的应用程序名称是test,并且您在dev配置文件上运行应用程序,则下面将同时使用两个属性。

test.properties
test-dev.properties

您还可以在配置客户端的bootstrap.properties中指定其他配置文件,以检索更多属性文件,如下所示。例如,

spring:
  profiles: dev
  cloud:
    config:
      uri: http://yourconfigserver.com:8888
      profile: dev,dev-db,dev-mq

如果您指定如上所述,则下面将同时使用所有文件。

test.properties
test-dev.properties
test-dev-db.prpoerties
test-dev-mq.properties

3
投票

请注意,提供的答案假定您的属性文件处理不同的执行配置文件如果他们不这样做,即您的属性由于某些其他原因(例如,维护目的,除以业务/功能域或任何其他适合您需求的原因)被拆分为不同的文件,那么,通过为每个此类文件定义配置文件,您只是“滥用”配置文件功能,以实现您的目标(每个应用程序的多个属性文件)。

然后你可以问“好的,那有什么问题?”。问题是你要克制自己的各种可能性。如果您确实希望按配置文件自定义应用程序配置,则必须为其创建伪,子,配置文件,因为文件名已经是配置文件。例:

您的应用程序配置可以通过您在springboot应用程序中使用的不同配置文件进行自定义(例如,在@Profile()注释中),让它们成为dev,uat,prod。您可以启动应用程序,将不同的配置文件设置为活动状'dev'与'uat',并获得你想要的属性组。对于a.properties b.properties和c.properties文件,如果支持不同的文件名,则可以使用a-dev.properties b-dev.properties和c-dev.properties文件与a-uat.properties b-uat 'dev'和'uat'配置文件的.properties和c-uat.properties文件。

然而,使用提供的解决方案,您已经为每个文件定义了3个配置文件:appname-a.properties appname-b.properties和appname-c.properties:a,b和c。现在想象你必须为每个......配置文件创建一个不同的配置文件(!它已经显示出错误了!)!您最终会得到大量的配置文件排列(随着文件的增加会变得更糟):文件将是appname-a-dev.properties,appname-b-dev.properties,app-c-dev.properties vs appname- a-uat.properties,appname-b-uat.properties,app-c-uat.properties,但是配置文件会从['dev','uat']增加到['a-dev','b- dev','c-dev','a-uat','b-uat','c-uat'] !!!

更糟糕的是,您将如何处理代码中的所有这些配置文件,更具体地说是@Profile()注释?您是否会因为想要添加一个或两个不同的属性文件而使用“人工”配置文件来混淆代码空间?在适当的情况下定义你的dev或uat配置文件应该足够了,并在其他地方定义适用的属性文件名(然后可以通过配置文件进一步支持,而不需要任何其他配置操作),就像它在externalized properties configuration for individual springboot apps中发生的那样

对于参数完整性,我将在此添加如果您希望有一天切换到.yml属性文件,使用提供的基于配置文件的命名解决方案,您也无法在同一个内部定义不同的“每个配置文件的yaml文档部分” .yml文件(是的,在.yml中你可以有一个属性文件,但在里面定义了多个逻辑yml文档,它通常用于自定义不同配置文件的属性,同时在一个地方具有所有相关属性)。由于您已经在文件名中使用了配置文件(appname-profile.yml),因此您失去了该功能

我发布了一个pull request with a minor fix for spring-cloud-config-server 1.4.x,它允许通过提供spring.cloud.congif.server来定义额外支持的文件名(appart来自“application [-profile]”和“{appname} [ - profile]”,这是当前支持的)。 searchNames环境属性 - 类似于springboot应用程序的spring.config.name。我希望它得到审查和接受。

© www.soinside.com 2019 - 2024. All rights reserved.