使用 Cloud Config Server 时的 Spring Boot 外部配置顺序?

Posted

技术标签:

【中文标题】使用 Cloud Config Server 时的 Spring Boot 外部配置顺序?【英文标题】:Spring Boot external configuration order when using Cloud Config Server? 【发布时间】:2016-07-21 13:41:31 【问题描述】:

我开始使用 Spring Cloud Config,并希望为客户端提供一种方法来覆盖来自 cofnig 服务器的属性。但是,在阅读https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html 之后,云配置何时适用并不明显。

我还阅读了http://cloud.spring.io/spring-cloud-config/spring-cloud-config.html,它谈到了覆盖。但它们似乎与我想要的相反(这些覆盖是为了覆盖客户端提供的属性)。

那么,Cloud Config 在排序中的位置是什么?我仍然可以在类路径上提供一个本地 application.properties 文件来覆盖某些 Cloud Config 属性吗?

【问题讨论】:

配置服务器应用在最顶层。如果您希望应用程序覆盖某些内容,为什么不在配置服务器中提供特定于应用程序的配置?我对你的用例有点困惑。 查看/env 执行器端点。它将向您显示应用程序中使用的属性源,以及它们相互覆盖的顺序(之前列出的源会覆盖后来列出的源)。一般情况下,ConfigServer 源很早,仅在默认排序中的命令行 -D 属性之后。 在测试应用程序时,通过 git 分支、推送和审查配置更改过程的开销太大。测试人员更喜欢一种无需通过 git 进程即可进行本地更改的方法。 你确定Spring Boot Actuator中的/env是按配置顺序排列的吗?对我来说,这似乎只是按字母顺序排列的。在我的示例中,defaultProperties 显示 after configService,这是不正确的排序。 @AndyShinn:你有什么东西要重新排序吗?当我点击端点时,我看到它们按以下顺序列出 1.profiles 2.configService:myrepo.git/application.properties 3.servletContextInitParams 4.systemProperties 5.systemEnvironment 6.applicationConfig:classpath:/application.properties 7.defaultProperties 【参考方案1】:

git commit/push 过程是过程的一部分,实际上...Spring Cloud Config 使用 git 来处理配置文件、更改、审计等,因为 git 非常适合这些,而 Config 充分利用了这些优势.

如果您只是在寻找一种方法来加快配置更改的测试并愿意接受权衡,您可以使用本地(或本地网络)存储库作为您的配置存储库进行测试。我意识到这不是你具体要求的,但它是一个可能有帮助的选项,假设你使用配置服务器应用程序的 application.properties 指向底层 git repo。如果是这样,您可以像这样在命令行上覆盖 spring.cloud.config.server.git.uri:

java -Dspring.cloud.config.server.git.uri=$HOME/testing/config-repo -jar your_jar_here.jar

这将允许您调整从配置服务器获取其设置的客户端应用程序/服务的配置设置,而不会影响生产配置文件(甚至是分支)。

我希望这会有所帮助。如果不是,或者我误解了您的目标或限制,请澄清(一两个用例可能有助于我更好地进行三角测量,如果您可以分享它们),我会再试一次。 :)

干杯, 标记

【讨论】:

其实这很有帮助,而且我没有考虑过。更进一步,我似乎可以使用模式匹配来匹配 staging*dev* 配置文件,并将这些请求发送到另一个 git 存储库,测试人员可以对其进行临时更改,而无需通过正常的 git 进程。如果这对我的用例有效,我会尝试并接受这个答案。 我会接受这一点并添加让我到达我想要的位置的信息:我正在使用 Spring Profiles 将 Spring Cloud Config git URI 切换到另一个大部分为空的测试存储库。由于此配置文件的 git 存储库为空,因此我仍然可以覆盖文件或环境变量中的属性(因为它们是唯一存在的属性)。 足智多谋!做得很好,很高兴你又回来了。最好的,安迪!

以上是关于使用 Cloud Config Server 时的 Spring Boot 外部配置顺序?的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud config server使用ssh方式连接config-repo

如何获取 Spring-Cloud-Config-Server 管理的文件列表

Spring Cloud Config Config Server - 多个实例之间的同步

spring cloud: 使用consul来替换config server

spring-cloud-config-server

spring.cloud.config.server.native.search-locations 不适用于 Spring Cloud Config 服务器中的占位符