当前位置: 首页 > 工具软件 > application > 使用案例 >

application.yml和application.properties和-dev加载和覆盖

冷宏茂
2023-12-01

springboot约定大于配置让我们省了很多心,但是很多约定我们却不是很确定

比如同时支持application.yml和application.properties那么谁配置为准呢?是怎样生效的呢?

同时配置的加载和覆盖问题

同时配置.yml和.properties的时候,是二者都生效,但是后面加载的会覆盖掉前面加载名称相同的属性,你可以理解为map,名称一样的被认定为是同一个配置,比如端口号。

这个规则不仅仅对application.yml和application.properties生效,对于衍生的application-dev.yml,application-dev.properties也生效

可以测试一下

同时有application的yml和properties文件和application-dev的yml和properties文件

端口依次为8101、8102、8103、8104

application两个配置里面都启用dev,spring.profiles.active=dev

最后结果是8104是application-dev.properties生效。
加载的顺序从
application->yml->properties->
application-dev->yml->properties,最后覆盖下来是8104.

迁移properties到yml文件

我不喜欢properties文件,原因无他,就是拿最常见的数据库配置,我要写四次spring.datasource,写的难受,读的也难受。

spring.datasource.driver=xxx
spring.datasource.url=jdbc:mysql://xxx
spring.datasource.username=xxx
spring.datasource.password=xxx

有人说你不会复制粘贴么?你先复制四个spring.datasource,然后再写配置?有些舍本逐末了,我本来就是配置项,我还先打个框架,你往里面填。。。

spring.datasource.xxx=xxx

但是旧的项目可能会使用properties的比较多,因为看习惯了,看yml总觉得没写对,会不会少了一个空格导致配置文件读取失败的问题,这个也难免,但是后面对于我们自己需要维护开发的本地环境,我们可以新增yml文件。

搭建yml配置

之前讲过了覆盖原理,其实我们很简单,

把application.properties中的spring.profiles.active=local改成我们的,比如我取个名字spring.profiles.active=qiushi

然后这个qiushi配置文件是没有properties文件的,所有就不用担心覆盖的问题。

新建application-qiushi.yml文件。
然后把之前启用的配置文件里面的配置移动过来就好了。

 类似资料: