通过环境变量覆盖 Spring Boot yaml 属性
Posted
技术标签:
【中文标题】通过环境变量覆盖 Spring Boot yaml 属性【英文标题】:Override Spring Boot yaml property via environment variable 【发布时间】:2022-01-12 23:25:38 【问题描述】:使用 Spring Boot 2.6.1,如果我有一个 application.properties
文件,看起来像:
spring.datasource.url="jdbc://blahblah"
我可以在运行时使用名为 spring.datasource.url
的环境变量覆盖该值,我的应用程序将连接到 env var 中指定的数据库。
但是,如果我有一个等效的 application.yaml
文件,那么以这种方式指定环境变量似乎没有效果。
spring:
datasource:
url: "jdbc://localhost..."
但是,如果我将环境变量重命名为 SPRING_DATASOURCE_URL
,覆盖将再次起作用。这似乎在其他属性中也是一致的(不仅仅是数据源 url)。
查看the docs 并不清楚为什么会出现这种情况,只是 yaml 配置似乎通常与“普通”属性文件略有不同。
这是预期的行为吗?
【问题讨论】:
【参考方案1】:作为described in the documentation,你应该使用环境变量SPRING_DATASOURCE_URL
来设置spring.datasource.url
属性。我很惊讶spring.datasource.url
在配置为环境变量时完全有效,我不会依赖它继续这样做。
【讨论】:
老实说,我也是,但在另一个项目中看到了它,我的想法是“嘿,现在 env vars 与属性名称完全匹配!”哦,好吧...大写是:)以上是关于通过环境变量覆盖 Spring Boot yaml 属性的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot基础3-配置文件详解:Properties和YAML
Spring Boot application.yaml中多个默认环境变量的语法