首先这两个都是springboot的配置文件,都有两种不同的后缀名分别是
bootstrap.yml、bootstrap.properties、application.yml、application.properties
对于刚刚新建的springboot项目一般都是application.properties,我们都习惯于新建一个application.properties配置文件
.yml文件:使用层级结构和缩进来表示属性之间的关系,采用了YAML(YAML Ain’t Markup Language)格式
.properties:使用键值对的方式进行配置,类似于传统的属性文件格式
作用:
bootstrap(.yml/.properties) 文件也是 SpringBoot 的默认配置文件,而且其加载的时间相比于 application(.yml/.properties) 更早。
application(.yml/.properties) 和 bootstrap(.yml/.properties) 虽然都是 SpringBoot 的默认配置文件,但是定位却不相同。
bootstrap(.yml/.properties) 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。
application(.yml/.properties) 可以用来定义应用级别的参数。
优先级
在同一级目录下,会先比较前缀 bootstrap 和 application,其中 bootstrap 比 application 的优先级高,其次再去比较后缀 .properties 和 .yml,其中 .properties 比 .yml 优先级高。
配置覆盖
相同类型比较 properties 优先级高
当同一个配置属性在 bootstrap.properties 和 bootstrap.yml 文件中都存在时,那么 properties 中的配置会被加载,而忽略 yml 文件中的配置(即优先级高的配置覆盖优先级低的配置),不同配置相互互补。此处 application(.properties/yml) 同理。
不同类型比较 applicatioin 覆盖 bootstrap
但当同一配置在 bootstrap 和 application 中都存在时,那么虽然优先加载 bootstrap 但是会被 applicatioin 中的配置覆盖,此时则变成了低优先级覆盖高优先的配置
application.properties 覆盖其他三种配置文件
当同一个配置属性在四种配置(bootstrap.properties、bootstrap.yml、application.properties、application.yml)都存在,application.properties 里的配置一定是会覆盖其他配置文件。
首先遵循第二点:虽然优先加载 bootstrap 但是会被 applicatioin 中的配置覆盖,这时候就只剩 application.yml 和 application.properties 了,其次遵循第一点:即优先级高的配置覆盖优先级低的配置,所以 application.properties 的配置文件会覆盖其他配置文件。