通过环境变量覆盖 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
在配置为环境变量时完全有效,我不会依赖它继续这样做。
使用 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
在配置为环境变量时完全有效,我不会依赖它继续这样做。