spring boot 外部配置 - profile 特定配置

Posted

技术标签:

【中文标题】spring boot 外部配置 - profile 特定配置【英文标题】:springboot external configuration - profile specific configuration 【发布时间】:2018-12-13 16:14:50 【问题描述】:

根据SpringBoot文档,配置顺序为:

打包 jar 之外的特定于配置文件的应用程序属性(application-profile.properties 和 YAML 变体)

打包在您的 jar 中的特定于配置文件的应用程序属性(application-profile.properties 和 YAML 变体)

打包 jar 之外的应用程序属性(application.properties 和 YAML 变体)。

应用程序属性打包在您的 jar 中(application.properties 和 YAML 变体)。

在我的项目中,我有一个名为“prod”的配置文件和以下文件:

application.yml(在 jar 中) application-prod.yml(在罐子里)

而且我还想使用外部文件覆盖一些属性。由于根据文档,外部application.yml 将被内部application-prod.yml 覆盖,我需要确保将外部文件视为profile specific 配置文件。

我试过用:

-Dspring.config.location=<my path>/application-prod.yml

我也试过了:

-Dspring.config.location=file:<my path>/application-prod.yml

在所有情况下,我都从 internal application-prod.yml

获得价值

如果我完全删除了内部配置文件,那么我会从外部获取值(所以我知道配置会获取文件)。

我了解此外部文件被视为与通用 application.yml 等效,而不是特定于配置文件。

如何将其配置为特定于配置文件的外部配置?

【问题讨论】:

为什么不直接命名为application-prod.yml?而不是试图破解它。 我已将其命名为 application-prod.yml 。只是 spring 的参数Dspring.config.location 忽略了这是一个特定于配置文件的配置,并将其视为通用配置。如何指定这是特定于配置文件的?我正在尝试按照文档的顺序或规则,而不是绕过它 你想多了你不需要spring.config.location。它已经覆盖了你想要的。 @M.Deinum 可能你还没有理解我的问题。我需要“spring.config.location”来传递外部文件的位置 如果它与你不想要的 jar 在同一个位置,如果你想要一个位置,那么指定一个位置而不是文件的完整路径,只使用目录(file:<my-path>/spring boot 将检测application.yml 等)这也在文档中明确说明。 > spring.config.location 中指定的文件按原样使用,不支持特定于配置文件的变体,并被任何特定于配置文件的属性覆盖。 【参考方案1】:

找到答案:

您需要在外部使用Directory 来设置配置文件特定的配置文件,而不是直接使用该文件,它需要以/ 结尾。所以它必须是:

-Dspring.profiles.active=prod

-Dspring.config.location=/<some-path>/config/(任何以/结尾的路径)

里面有一个:

application-prod.yml

【讨论】:

以上是关于spring boot 外部配置 - profile 特定配置的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 项目通过 Maven profiles 使用 -P 支持项目多环境配置打包

Spring Boot 项目通过 Maven profiles 使用 -P 支持项目多环境配置打包

Spring Boot 5-profile配置

spring boot 配置属性 之 spring.profiles.include

4spring boot 配置文件之profile

spring boot 之 spring.profiles