1. 区别
- bootstrap 配置文件先于 application 配置文件被加载,会先创建初始化 Bootstrap Context,再创建初始化 Application Context,应用于早期的配置信息。
- bootstrap 和 application 共享同一个 Environment。
- 默认情况下,bootstrap 的配置不会被覆盖,而 application 的配置项可以被覆盖(比如被application-dev 覆盖,或被 java 命令行覆盖)
2. bootstrap应用
- 从 Spring Cloud Config 和 Consul 获取配置,初始化 Application Context需要在 Config/Consul 获取配置。Config/Consul 基本信息就不能写到 application.yml 等到 Application Context 初始化时才读取,必须在 bootstrap.yml 里配置, Application Context 初始化时才知道需去 Config/Consul 获取配置,知道 Config/Consul 的基本信息
- 一些固定的不希望被覆盖的属性,如程序的名字
- 一些加解密的场景
3. 多个application 的配置
application.yml,application-dev.yml,application-prod.yml
在 application.yml 指定
spring:
profiles:
active: dev
4. 加载顺序
SpringBoot 在加载 application.yml 后还会加载 application-dev.yml 并且如果两个文件有相同的配置项,那么 application.yml 的会被 application-dev.yml 的覆盖
配置文件可以存在 4 个地方,按优先级从高到低是
- 项目根目录下的 config 文件夹
- 项目根目录
- classpath 下的 config 文件夹
- classpath
5. 命令指定
在 JAVA 命令指定配置文件
java -jar spring-boot-hello-1.0.0-SNAPSHOT.jar --spring.config.location=~/application.yml
6. 覆盖文件
在 java 命令中覆盖配置文件,指定了新的 port 和 profile
java -jar spring-boot-hello-1.0.0-SNAPSHOT.jar --spring.profiles.active=prod --server.port=9999
|