目录
SpringBoot 配置文件类型
1.properties
2.yaml
SpringBoot 配置文件默认读取优先级(根据配置文件位置与后缀)
1.不同位置的配置文件读取优先级
2.相同位置下的不同文件类型的读取优先级
SpringBoot 特殊的配置文件读取方式
1.profiles配置
2.读取指定的配置文件
SpringBoot 配置文件类型
SpringBoot中为我们提供了两种配置文件的格式,分别是properties和yaml
1.properties
properties文件是在SpringBoot之前较为常用的配置文件类型,内容格式为 “key=value”,例如:
#propreties文件中以#或者!开头表示注释,比如此行是注释
!此行这也是注释,注释的内容不会被读取
server.port=9001
server.servlet.context-path=/value
以服务器的端口和基础路径为例,表示使用9001端口,服务基础路径为“/value”
格式的语法基于Hashtable ,一般来说只使用一行来表示一个属性的key和value,但是如果一定要换行的话,key不可以换行,value可以换行,但是要加上换行符\
properties文件的内容格式还可以写为“key:value”的方式,以冒号连接key和value,例如: server.port:9001
2.yaml
yaml是一个相对来说可读性更高的表达数据序列化的格式,使用yaml的格式来描述上述内容如下:
server:
#注释
port: 9001
servlet:
context-path: /value
yaml的语法格式类似于Json,层层包含,层级清晰,且显示更简洁,用树状表示层级关系既减少了重复名称的出现,还增加了可读性,一般来说更推荐使用yaml文件作为配置文件。
需要注意的是:每个属性值与冒号之间必须要有一个空格例如port:(空格)9001,冒号与值之间如果没有空格的话将不能正确的读取到属性。
后缀名:一般为 .yaml 或 .yml
与properties文件不同的是yaml文件仅支持”#“开头作为注释。
SpringBoot 配置文件默认读取优先级(根据配置文件位置与后缀)
首先要说明的是,SpringBoot的配置文件读取是采用“约定大于配置”的原则。SpringBoot在没有任何其他配置的情况下,配置文件的名称约定为application.properties(或yml、yaml),若使用其他文件名则无法读取到配置文件。
1.不同位置的配置文件读取优先级
SpringBoot的默认读取配置文件的路径有以下四个:
以我本地的项目所在的根路径 (D:\testpro\bootconfig\)为例:
1)根路径下的config文件夹(D:\testpro\bootconfig\config\application.yml)
2) 根路径下(D:\testpro\bootconfig\application.yml)
3)classpath下的config文件夹(D:\testpro\bootconfig\src\main\resources\config\application.yml)
4)classpath下(D:\testpro\bootconfig\src\main\resources\application.yml)
上面的排列顺序也是SpringBoot在加载配置文件时的默认读取顺序,依次是:根路径下的config文件夹 --> 根路径下 --> classpath下的config文件夹 --> classpath下。
截图中的四个配置文件上标有1,2,3,4分别对应上面的1-4,可以验证,项目启动时确实是最优先读取根路径下的config文件夹为中的配置文件,使用的是(1)中的9001端口。
同时,大家可以发现四个配置文件都配置了server.port属性,项目启动时是使用了(1)中配置端口,但是项目的访问路径context-path却是使用了(4)中配置的“/9004”,这说明,SpringBoot读取配置文件时,并不是只读取优先级最高的文件中的内容,在读取完成后,还会继续按优先级顺序读取其他位置的配置文件,遇到已经配置的相同属性,则取优先级最高的配置值,而如果遇到前面的配置文件中没有配置的属性,则会进行互补。
2.相同位置下的不同文件类型的读取优先级
上面说了SpringBoot的配置文件一般使用properties和yaml两种类型,共有三种文件后缀 1) .properties 2) .yml 3) .yaml
这张截图则说明,同一位置下这三种后缀的配置文件的优先级从高到底依次是 .properties ---> .yml ---> .yaml
SpringBoot 特殊的配置文件读取方式
1.profiles配置
配置文件中使用profiles配置
创建三个配置文件,分别是application.yml 、application-prod.yml 、application-dev.yml,文件内容如上图
在系统默认读取的application.yml文件中,写入profiles配置,active激活“prod”,那么SpringBoot就会去读取application-prod.yml配置文件的内容。
即若有profiles设置,则SpringBoot会默认读取application-{profiles}.yml(.yaml或.properties)文件,{profiles}即是配置中active激活的选项。
上图还说明,设置profiles之后,会完全读取激活的配置文件内容,其他未激活的配置文件则会被忽略。
2.读取指定的配置文件
(1)除了在application.properties/.yml/.yaml配置profiles之外,也可以在手动调用jar包时,在启动指令后面加上参数来指定激活的profiles配置文件,如上图,在后面加上
--spring.profiles.active=dev; 则会直接使用dev配置文件中的内容,而不是jar包中之前配置的prod。
还可以指定配置文件的名称来激活配置文件,参数为--spring.config.name=application-dev
(2)指定jar包以外其他的配置文件
通过 --spring.config.location=D:/application.yml 命令来使SpringBoot在启动时读取硬盘上只当位置的配置文件内容。
需要注意的是:通过指定配置文件来启动SpringBoot的方式,会仅读取指定的配置文件内容,不会和其他文件进行互补。
且通过上面是示例还可以看出,指定的配置文件优先级是高于jar包内的其他配置文件的。
通过以上不同的读取SpringBoot配置文件的方法以及读取优先级,可以实现在不同场景下灵活切换不同的配置信息。