通过环境变量覆盖 Spring Boot yaml 属性

Override Spring Boot yaml property via environment variable

使用 Spring Boot 2.6.1,如果我有一个 application.properties 文件,如下所示:

spring.datasource.url="jdbc://blahblah"

我可以在运行时使用名为 spring.datasource.url 的环境变量覆盖该值,我的应用程序将连接到环境变量中指定的数据库。

但是,如果我有一个等效的 application.yaml 文件,以这种方式指定环境变量似乎没有任何效果。

spring:
  datasource:
    url: "jdbc://localhost..."

但是,如果我将我的环境变量重命名为 SPRING_DATASOURCE_URL,覆盖将再次起作用。这似乎在其他属性中也是一致的(不仅仅是数据源 url)。

查看 the docs 并不清楚为什么会这样,除了 yaml 配置似乎通常与“普通”属性文件的处理方式略有不同。

这种行为是预期的吗?

作为described in the documentation,你应该使用环境变量SPRING_DATASOURCE_URL来设置spring.datasource.url 属性。我很惊讶 spring.datasource.url 在配置为环境变量时完全有效,我不会依赖它继续这样做。