Dav*_*ang 9 spring-cloud spring-cloud-config
Spring云配置服务器支持使用名称读取属性文件${spring.application.name}.properties.但是我的应用程序中有2个属性文件.
a.properties
b.properties
Run Code Online (Sandbox Code Playgroud)
我可以让配置服务器读取这两个属性文件吗?
yon*_*oon 12
在配置服务器正在查看的git或文件系统中重命名属性文件.
a.properties -> <your_application_name>.properties
a.properties -> <your_application_name>-<profile-name>.properties
Run Code Online (Sandbox Code Playgroud)
例如,如果您的应用程序名称是,test并且您在dev配置文件上运行应用程序,则下面将同时使用两个属性.
test.properties
test-dev.properties
Run Code Online (Sandbox Code Playgroud)
您还可以在bootstrap.properties配置客户端中指定其他配置文件,以检索更多属性文件,如下所示.例如,
spring:
profiles: dev
cloud:
config:
uri: http://yourconfigserver.com:8888
profile: dev,dev-db,dev-mq
Run Code Online (Sandbox Code Playgroud)
如果您指定如上所述,则下面将同时使用所有文件.
test.properties
test-dev.properties
test-dev-db.prpoerties
test-dev-mq.properties
Run Code Online (Sandbox Code Playgroud)
请注意,提供的答案假设您的属性文件针对不同的执行配置文件。如果不这样做,即由于某种其他原因(例如出于维护目的,按业务/功能域划分的原因)或满足您需求的任何其他原因将您的属性拆分为不同的文件,则通过为每个此类文件定义一个配置文件,您只是“滥用”配置文件功能,以实现您的目标(每个应用有多个属性文件)。
然后,您可以问“好,那是什么问题?”。问题是您要限制自己免受其他各种可能性的困扰。如果您实际上想通过配置文件自定义应用程序配置,则必须为此创建伪子配置文件,因为文件名已经是一个配置文件。例:
您的应用程序配置可以通过不同的配置文件进行自定义,您可以在springboot应用程序内部使用这些配置文件(例如,在@Profile()批注中),让它们成为dev,uat,prod。您可以启动您的应用程序,将其他配置文件设置为活动状态,例如“ dev”和“ uat”,并获得所需的属性组。对于a.properties b.properties和c.properties文件,如果支持不同的文件名,则将拥有a- dev .properties b- dev .properties和c- dev .properties文件,而a.at.properties b- atat .properties和命令.dev和'uat'配置文件的.properties文件。
然而,与所提供的解决方案,您已经定义了3个配置文件为每个文件:appname-a.properties appname-b.properties和appname-c.properties:一,b,和Ç。现在,假设您必须为每个...配置文件创建一个不同的配置文件(!它已经显示这里出了问题)!您最终会有很多配置文件排列(随着文件的增加,情况会变得更糟):文件将是appname- a-dev .properties,appname- b-dev .properties,app- c-dev .properties与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配置文件,并在其他地方定义适用的属性文件名(然后可以由配置文件进一步支持,而无需任何其他配置操作),就像在外部属性中发生的一样单个springboot应用程序的配置
为了保证参数的完整性,我仅在此处添加一下,如果您希望有一天要切换到.yml属性文件,则使用提供的基于配置文件的命名解决方案,还可以放弃在同一配置文件中定义不同的“每个配置文件的Yaml文档部分”的功能.yml文件(是的,在.yml中,您可以有一个属性文件,但是在其中定义了多个逻辑yml文档,通常这样做是为了自定义不同配置文件的属性,同时将所有相关属性放在一个位置)。您失去了能力,因为您已经在文件名(appname-profile.yml)中使用了配置文件
我发布了一个带有spring-cloud-config-server 1.4.x的次要修复程序的拉取请求,该请求允许定义其他受支持的文件名(来自“ application [-profile]”和“ {appname} [-profile]”的appart,当前支持)提供了一个spring.cloud.congif.server.searchNames环境属性-类似于spring.config.name为springboot应用。我希望它得到审查和接受。
我最近遇到了同样的要求,但有更多的限制,我不允许在环境配置文件中玩耍。所以我不被允许做公认的答案。我正在分享我是如何做到的,作为可能与我有相同情况的人的替代方案。
在我的应用程序中,我有以下属性:
appxyz-data-soures.properties
appxyz-data-soures-staging.properties
appxyz-data-soures-production.properties
appxyz-interfaces.properties
appxyz-interfaces-staging.properties
appxyz-interfaces-production.properties
appxyz-feature.properties
appxyz-feature-staging.properties
appxyz-feature-production.properties
application.properties // for my use, contains local properties only
bootstrap.properties // for my use, contains management properties only
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我设置了这些特定的属性,使我能够实现我所需要的。但请注意,我还有其他所需的配置(启用云配置、执行器刷新、eureka 服务发现等) - 仅突出显示这些以强调:
spring.application.name=appxyz
spring.cloud.config.name=appxyz-data-soures,appxyz-interfaces,appxyz-feature
Run Code Online (Sandbox Code Playgroud)
您可以观察到我不想玩弄我的应用程序名称,而是将它用作我的配置属性文件的前缀。
在我的配置服务器中,我在 application.yml 中配置以捕获pattern: 'appxyz-*':
spring:
cloud:
config:
server:
git:
uri: <git repo default>
repos:
appxyz:
pattern: 'appxyz-*'
uri: <another git repo if you have 1 repo per app>
private-key: ${git.appxyz.pk}
strict-host-key-checking: false
ignore-local-ssh-settings: true
private-key: ${git.default.pk}
Run Code Online (Sandbox Code Playgroud)
在我的 Git 存储库中,我有以下内容。没有 application.properties 和 bootstrap 因为我不希望它们在外部被发布和覆盖/刷新,但如果你愿意,你可以这样做。
appxyz-data-soures.properties
appxyz-data-soures-staging.properties
appxyz-data-soures-production.properties
appxyz-interfaces.properties
appxyz-interfaces-staging.properties
appxyz-interfaces-production.properties
appxyz-feature.properties
appxyz-feature-staging.properties
appxyz-feature-production.properties
Run Code Online (Sandbox Code Playgroud)
模式匹配pattern: 'appxyz-*'将从我的 git 存储库中捕获并返回匹配的文件。配置文件也将相应地应用并获取正确的属性文件。还保留了价值的优先级。
此外,如果您希望在您的应用程序中添加更多文件(例如appxyz-circuit-breaker.properties),我们只需要执行以下操作:
spring.cloud.config.name=...,appxyz-circuit-breaker以后无需添加/修改更多内容或重新启动配置服务器。对于新的应用程序,在reposapplication.yml下添加一个条目就像一次注册一样。
希望它以某种方式有所帮助!
| 归档时间: |
|
| 查看次数: |
5669 次 |
| 最近记录: |