82、高级特性-配置加载优先级
82、高级特性-配置加载优先级
在Spring Boot中,配置加载优先级决定了多个配置源中相同属性的最终取值。以下是详细的配置加载优先级顺序:
#### 按配置来源优先级(从高到低)
1. **命令行参数**
- 通过`--key=value`形式在启动时传入,具有最高优先级。
- 示例:`java -jar myapp.jar --server.port=8081`
2. **Java系统属性**
- 使用`-Dkey=value`在启动时设置。
- 示例:`java -Dserver.port=8081 -jar myapp.jar`
3. **操作系统环境变量**
- 在操作系统中设置的变量,如`SERVER_PORT=8081`。
4. **JNDI属性**
- 从Java命名和目录接口获取,适用于J2EE环境。
5. **`RandomValuePropertySource`**
- 用于生成随机数,如`my.secret=${random.int}`。
6. **外部配置文件**
- **打包外部的`application.properties`或`application.yml`**
- 位于`jar`包同级目录或指定目录,如`/my/config/application.properties`。
- 可通过`--spring.config.location`指定路径。
- **打包外部的`application-{profile}.properties`或`application-{profile}.yml`**
- 根据激活的`profile`加载,如`application-dev.properties`。
7. **内部配置文件**
- **`application.properties`或`application.yml`**
- 位于`src/main/resources`目录下。
- **`application-{profile}.properties`或`application-{profile}.yml`**
- 根据激活的`profile`加载,优先级高于默认的`application.properties`或`application.yml`。
8. **`@PropertySource`注解**
- 在配置类上使用`@PropertySource`加载的外部属性文件。
9. **默认属性**
- 通过`SpringApplication.setDefaultProperties`设置的默认值。
#### 按文件类型优先级(在相同来源下)
- **`application.properties`**
- **`application.yml`**
- **`application.yaml`**
#### 注意事项
- **相同属性覆盖原则**:高优先级的配置会覆盖低优先级的相同属性。
- **不同属性累加原则**:不同配置源中的不同属性会累加,共同生效。
- **`bootstrap`配置文件**:`bootstrap.properties`和`bootstrap.yml`用于配置Spring Cloud Config等,加载顺序在`application`系列文件之前。
通过理解以上配置加载优先级,可以更灵活地管理和配置Spring Boot应用程序,满足不同环境和需求。