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 支持项目多环境配置打包