Spring Boot配置文件顺序学习
1、SpringBoot的总体读取顺序优先级包外大于包内,properties大于yml。
2、 SpringBoot的总体读取顺序如下所示:
- config/application.properties(项目同级目录中config目录下)
- config/application.yml
- application.properties(项目同级目录下)
- application.yml
- resources/config/application.properties(项目resources目录中config目录下)
- resources/config/application.yml
- resources/application.properties(项目的resources目录下)
- resources/application.yml
项目同级目录,相当于生产环境中的JAR包。
3、配置文件中只要有spring.profiles.active=dev代码程序就会激活。如果该代码在包内,程序会优先读取包外的配置(包外的conf/application-dev.properties->conf/application-dev.yml->application-dev.properties->application-dev.yml)再读取包内的配置。如果配置在包外,很容易理解,就不赘述了。
举个例子,项目包的部署后的目录结构如下:
│─SpringBootTest
│ │ application-dev.properties
│ │ application.properties
│ │ SpringBootDemo-0.0.1-SNAPSHOT.jar
│ └──config
│ application-dev.properties
│ application.yml
spring.profiles.active=dev代码在包SpringBootDemo-0.0.1-SNAPSHOT.jar中,其他地方没有。经过测试,发现配置文件的优先级如下所示**(数字越小优先级越高)**:
│─SpringBootTest
│ │ application-dev.properties (2)
│ │ application.properties (4)
│ │ SpringBootDemo-0.0.1-SNAPSHOT.jar (5)
│ └──config
│ application-dev.properties (1)
│ application.yml (3)
包外的dev配置读完,再读包外其他配置,最后读包内的配置。
另一个例子,项目包的部署后的目录结构如下:
├─SpringBootTest
│ │ application.properties
│ │ SpringBootDemo-0.0.1-SNAPSHOT.jar
│ └──config
│ application.yml
spring.profiles.active=dev代码在包SpringBootDemo-0.0.1-SNAPSHOT.jar中,其他地方没有。经过测试,发现配置文件的优先级如下所示**(数字越小优先级越高)**:
├─SpringBootTest
│ │ application.properties (2)
│ │ SpringBootDemo-0.0.1-SNAPSHOT.jar (3)
│ └──config
│ application.yml (1)
包外的配置读完,再读包内的配置。
综上两个例子,可以知道,即使包内有激活profiles的代码会生效,但如果包外有配置会先读包外的配置,并不会优先读包内的dev配置。
4、yml和properties混用容易出问题,最好都用同一种格式。
5、现网都要有外置的配置文件,且需要激活profile,这样可以保证优先读取包外的配置。