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

Awe*_*own 4 yaml properties-file spring-boot

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

spring.datasource.url="jdbc://blahblah"
Run Code Online (Sandbox Code Playgroud)

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

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

spring:
  datasource:
    url: "jdbc://localhost..."
Run Code Online (Sandbox Code Playgroud)

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

浏览文档,并不清楚为什么会出现这种情况,除了 yaml 配置似乎通常与“正常”属性文件的处理方式略有不同。

这种行为是预期的吗?

And*_*son 8

文档中所述,您应该使用环境变量SPRING_DATASOURCE_URL来设置spring.datasource.url属性。我很惊讶它spring.datasource.url在配置为环境变量时竟然能起作用,而且我不会依赖它继续这样做。