SpringBoot中不同位置的配置文件的加载顺序、优先级
配置文件加载位置
SpringBoot
应用程序在启动时会遵循以下顺序进行加载配置文件
类路径下的配置文件 类路径内 config
子目录的配置文件项目根目录下的配置文件 项目根目录下 config
子目录的配置文件
. project-sample
├── config
│ ├── application.yml (4)
│ └── src/main/resources
| │ ├── application.yml (1)
| │ └── config
| | │ ├── application.yml (2)
├── application.yml (3)
注:src/main/resources下的配置文件在项目编译时,会放在target/classes下
启动时加载配置文件顺序:1 > 2 > 3 > 4
,优先级 4 > 3 > 2 > 1
注意:如果在IDEA
种是多 module
项目,3 和 4 的位置是指的是项目根目录下的位置
.properties 和 .yml 文件同时存在时,.properties会失效,.yml会起作用。
几个原则:
不同位置的配置文件可以进行互补;对于相同名称的配置,优先级高的会覆盖优先级低的配置
bootstrap.yml 的使用场景
SpringBoot中有以下两种配置文件bootstrap (.yml 或者 .properties),application (.yml 或者 .properties)
bootstrap.yml(bootstrap.properties)先加载 application.yml(application.properties)后加载
bootstrap.yml 用于应用程序上下文的引导阶段,由父Spring ApplicationContext加载。父ApplicationContext 被加载到使用application.yml的之前。
在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。
bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。
bootstrap.yml
优先级比 application.yml
高。主要有以下几个使用场景
1. 使用SpringCloud Config配置中心时,这时需要在bootstrap配置文件中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
2. 一些固定的不能被覆盖的属性;
3. 一些加密/解密的场景。
外部配置文件的加载顺序
官方解释:SpringBoot官网boot-features-external-config
开发者工具 Devtools 全局配置参数;
单元测试上的 [@TestPropertySource](mailto:@TestPropertySource)` 注解指定的参数;
单元测试上的 [@SpringBootTest](mailto:@SpringBootTest)` 注解指定的参数;
命令行指定的参数,如 java -jar springboot.jar --name="xxx";
命令行中的 SPRING_APPLICATION_JSONJSON 指定参数, 如 java -Dspring.application.json='{"name":"xxx"}' -jar springboot.jar
ServletConfig初始化参数;
ServletContext初始化参数;
JNDI参数(如 java:comp/env/spring.application.json);
Java系统参数(来源:System.getProperties());
操作系统环境变量参数;
RandomValuePropertySource 随机数,仅匹配:ramdom.*;
JAR包外面的配置文件参数(application-{profile}.properties(YAML))
JAR包里面的配置文件参数(application-{profile}.properties(YAML))
JAR包外面的配置文件参数(application.properties(YAML))
JAR包里面的配置文件参数(application.properties(YAML))
@Configuration (mailto:@Configuration)配置文件上 @PropertySource(mailto:@PropertySource) 注解加载的参数;
默认参数(通过 SpringApplication.setDefaultProperties 指定);
命令行参数
java -server
-jar app.jar --spring.profiles.active=product
在IDEA中设置命令行入参
SpringBoot 自定义banner
在 src\main\resources
下创建banner.txt
制作banner字符,复制到 banner.txt
文件中
制作网站:
http://patorjk.com/software/taag http://www.network-science.de/ascii/ 图片转txt:https://www.degraeve.com/img2txt.php
原理:主要类:Banner
、SpringBootBanner
、ResourceBanner