【实用小技巧】如何不更新application.yml而更新spring的配置
大家都知道,我们在java工程中,常常在application.yml中有各种各样的运行时的配置,一般来说都是这样的结构:
a:
b:
c: {ENV_NAME}
这样,我们在部署应用时,就可以通过在不同的局点修改ENV_NAME的值,来达到修改配置的目的。
但是如果是本来没存在在applicatoin.yml里面的配置呢,比如此时我需要再a.b.c下面加一个a.b.d?
当然,最直接的办法就是修改application.yml,加上a.b.d,就像这样:
a:
b:
c: {ENV_NAME}
d: {ENV_NAME2}
但是这样就有个问题,在当下容器化的时代,这就意味着我要更改镜像,镜像一改,那涉及到的流程就比改配置多多了,比如整体的验证、镜像上线的变更等。
那有没有不修改application.yml就能修改spring application配置的方法呢?
答案是有的,就是这个:
更改应用程序外部属性的位置
默认情况下,来自不同来源的属性会按定义的顺序添加到 Spring 中(有关确切顺序,请参阅“Spring Boot 功能”部分中的“外部化配置”)。
Environment
您还可以提供以下系统属性(或环境变量)来更改行为:
spring.config.name
(SPRING_CONFIG_NAME
):默认为文件名的根目录。application
spring.config.location
(SPRING_CONFIG_LOCATION
):要加载的文件(例如类路径资源或 URL)。 为本文档设置了单独的属性源,系统属性、环境变量或命令行可以重写该属性源。Environment
无论您在环境中设置了什么,Spring Boot 始终如上所述加载。 默认情况下,如果使用 YAML,则扩展名为“.yaml”和“.yml”的文件也会添加到列表中。
application.properties
所以,当我们需要添加a.b.d这个配置时,直接在部署这个spring application的地方声明一个A_B_D的环境变量,并赋上对应的值就行