目录

SpringBoot 配置文件类型

1.properties

2.yaml

SpringBoot 配置文件默认读取优先级(根据配置文件位置与后缀)

1.不同位置的配置文件读取优先级

2.相同位置下的不同文件类型的读取优先级

SpringBoot 特殊的配置文件读取方式

1.profiles配置

2.读取指定的配置文件


SpringBoot 配置文件类型

SpringBoot中为我们提供了两种配置文件的格式,分别是properties和yaml

1.properties

properties文件是在SpringBoot之前较为常用的配置文件类型,内容格式为 “key=value”,例如:

  

springboot 默认 HikariDataSource_java

#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的格式来描述上述内容如下:

  

springboot 默认 HikariDataSource_文件读取_02

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 默认 HikariDataSource_java_03

上面的排列顺序也是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

springboot 默认 HikariDataSource_文件读取_04

这张截图则说明,同一位置下这三种后缀的配置文件的优先级从高到底依次是  .properties  --->  .yml  ---> .yaml

SpringBoot 特殊的配置文件读取方式

1.profiles配置

配置文件中使用profiles配置

springboot 默认 HikariDataSource_文件读取_05

创建三个配置文件,分别是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.读取指定的配置文件

springboot 默认 HikariDataSource_spring boot_06

(1)除了在application.properties/.yml/.yaml配置profiles之外,也可以在手动调用jar包时,在启动指令后面加上参数来指定激活的profiles配置文件,如上图,在后面加上

--spring.profiles.active=dev; 则会直接使用dev配置文件中的内容,而不是jar包中之前配置的prod。

还可以指定配置文件的名称来激活配置文件,参数为--spring.config.name=application-dev

springboot 默认 HikariDataSource_java_07

(2)指定jar包以外其他的配置文件

springboot 默认 HikariDataSource_优先级_08

通过 --spring.config.location=D:/application.yml  命令来使SpringBoot在启动时读取硬盘上只当位置的配置文件内容。

需要注意的是:通过指定配置文件来启动SpringBoot的方式,会仅读取指定的配置文件内容,不会和其他文件进行互补。

且通过上面是示例还可以看出,指定的配置文件优先级是高于jar包内的其他配置文件的。

 

通过以上不同的读取SpringBoot配置文件的方法以及读取优先级,可以实现在不同场景下灵活切换不同的配置信息。