Spring Boot-14

Spring Boot 配置加载顺序

Spring Boot 在启动时按照以下顺序加载配置属性(从优先级低到高):

1. **默认属性**
   - Spring Boot 内置的一些默认配置属性。

2. **`@PropertySource` 注解中的属性**
   - 在 `@Configuration` 类中使用 `@PropertySource` 注解指定的属性文件。

3. **`SpringApplication.setDefaultProperties`**
   - 在 SpringApplication 实例中设置的默认属性。

4. **操作系统环境变量**
   - 系统级环境变量,例如 `SPRING_DATASOURCE_URL`。

5. **Java 系统属性**
   - JVM 系统属性,例如通过 `-D` 选项设置的属性。

6. **配置文件外部化属性**
   - 应用程序外部化的配置文件,例如 `application.properties` 或 `application.yml`,存储在外部位置,可以通过命令行参数 `--spring.config.location` 指定。

7. **应用程序的配置文件**
   - `application.properties` 或 `application.yml`,存储在 `src/main/resources` 或 `src/main/resources/config` 目录中。

8. **命令行参数**
   - 在应用程序启动时通过命令行传递的参数,例如 `--server.port=8081`。

 示例

假设在应用程序中存在以下配置源:

- 默认属性
- `application.properties` 文件中的属性
- 命令行参数

**`application.properties` 文件:**


server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/mydb

**命令行参数:**


java -jar myapp.jar --server.port=9090

在这种情况下,`server.port` 属性的最终值将是 `9090`,因为命令行参数具有最高优先级。

### 配置加载顺序的实际应用

了解配置加载顺序的实际应用有助于更好地管理和覆盖配置属性。例如,可以使用不同的配置文件来管理开发、测试和生产环境中的配置。

**多环境配置示例:**

在 `src/main/resources` 目录下创建不同的配置文件,例如:

- `application-dev.properties`
- `application-test.properties`
- `application-prod.properties`

通过设置 `spring.profiles.active` 属性来选择激活的配置文件:

**`application.properties` 文件:**


spring.profiles.active=dev

### 代码示例:加载和覆盖配置属性

假设我们有一个配置类 `MyAppProperties`,它使用 `@ConfigurationProperties` 注解来绑定配置属性:


import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "myapp")
public class MyAppProperties {
    private String name;
    private int port;

    // Getters and Setters
}

**`application.properties` 文件:**


myapp.name=SpringBootApp
myapp.port=8080

**命令行参数:**


java -jar myapp.jar --myapp.port=9090

在这种情况下,`myapp.port` 的值将被命令行参数覆盖为 `9090`。

Spring Boot 2.x 配置属性源的详细顺序

以下是 Spring Boot 2.x 中配置属性的详细加载顺序(从优先级低到高):

1. **默认属性**(通过 `SpringApplication.setDefaultProperties` 设置)
2. **`@PropertySource` 注解中的属性**
3. **配置文件中的属性**
   - `application.properties` 或 `application.yml`(`src/main/resources` 或 `src/main/resources/config`)
   - 外部化配置文件(通过 `spring.config.location` 指定)
4. **操作系统环境变量**
5. **Java 系统属性**
6. **命令行参数**

总结

  1. 命令行参数:可以在运行 Spring Boot 应用时指定命令行参数,这些参数会覆盖在配置文件中定义的相同属性。

  2. SPRING_APPLICATION_JSON:可以通过环境变量 SPRING_APPLICATION_JSON 来设置一些配置属性,它的值是一个 JSON 字符串。

  3. Java System 属性:可以通过在运行应用程序之前设置 Java 系统属性来配置应用程序的属性。

  4. 操作系统环境变量:系统环境变量中的属性会被自动加载到 Spring Boot 的环境变量中。

  5. RandomValuePropertySource:Spring Boot 在创建环境时会添加一个 RandomValuePropertySource,它可以用来生成随机值。

  6. Jar 包外的 application.properties 或 application.yml 文件:Spring Boot 会自动加载 classpath 下的 application.properties 或 application.yml 文件,优先加载 yml 文件。

  7. Jar 包内的 application.properties 或 application.yml 文件:如果应用程序打包为 JAR 文件,那么 Spring Boot 会优先加载 JAR 文件内部的配置文件。

  8. 通过 @PropertySource 注解加载的配置文件:可以使用 @PropertySource 注解来加载额外的配置文件。

  9. 默认属性:Spring Boot 提供了一些默认属性,它们可以在应用程序中使用。

   

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值