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文件,原因无他,就是拿最常见的数据库配置,我要写四次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文件。
之前讲过了覆盖原理,其实我们很简单,
把application.properties中的spring.profiles.active=local
改成我们的,比如我取个名字spring.profiles.active=qiushi
然后这个qiushi配置文件是没有properties文件的,所有就不用担心覆盖的问题。
新建application-qiushi.yml文件。
然后把之前启用的配置文件里面的配置移动过来就好了。