聊聊Spring Boot配置文件:优先级顺序、加载顺序、bootstrap.yml与application.yml区别详解
作者:mmseoamin日期:2024-01-21

Spring Boot 配置文件

优先级顺序

在 Spring Boot 中,配置文件的优先级顺序是:application-{profile}.yml(application-{profile}.properties) > application.yml(application.properties) > bootstrap.yml(bootstrap.properties)。其中,{profile} 表示不同的环境配置,如 dev、test、prod 等。

优先级从高到低,高优先级的配置覆盖低优先级的配置,所有的配置会形成互补配置。

加载顺序

在 Spring Boot 中,配置文件的加载顺序是按照以下规则:

  1. bootstrap.yml 或 bootstrap.properties: 这是最先加载的配置文件,用于配置应用程序上下文的基础设施,例如外部配置源和加密/解密。
  2. application.yml 或 application.properties: 这是主配置文件,包含应用程序的常规配置。
  3. application-{profile}.yml 或 application-{profile}.properties: 针对不同的环境(profile)加载相应的配置文件。例如,application-dev.yml 用于开发环境,application-prod.yml 用于生产环境。

在加载配置文件时,Spring Boot 会按照上述顺序依次查找并加载相应的配置项。

当存在相同名称的配置项时,

后加载的配置文件会覆盖之前加载的相同键名的配置项。这种顺序保证了较高优先级的配置文件可以覆盖较低优先级的配置,实现了灵活的配置管理。

bootstrap.yml 和 application.yml 有什么区别?

bootstrap.yml 和 application.yml 都是 Spring Boot 项目中常用的配置文件。它们之间的主要区别如下:

  1. 用途不同:

    • bootstrap.yml 文件主要用于配置 Spring Boot 应用程序的启动参数,例如数据库连接、服务器端口等。这些参数在应用程序启动时需要设置,因此将它们放在 bootstrap.yml 文件中。
    • application.yml 文件用于配置 Spring Boot 应用程序的全局参数,例如日志级别、缓存策略等。这些参数在应用程序运行时可以更改,但一旦更改,所有使用这些参数的地方都会受到影响,因此将它们放在 application.yml 文件中。
    • 内容不同:

      • bootstrap.yml 文件通常包含一些硬编码的配置值,例如数据库连接 URL、服务器端口等。这些值在应用程序启动时需要设置,因此将它们放在 bootstrap.yml 文件中。
      • application.yml 文件通常包含一些可配置的值,例如日志级别、缓存策略等。这些值在应用程序运行时可以更改,但一旦更改,所有使用这些值的地方都会受到影响,因此将它们放在 application.yml 文件中。
      • 顺序不同:

        • bootstrap.yml 文件在 application.yml 文件之前加载,因此在 application.yml 文件中定义的配置值会覆盖 bootstrap.yml 文件中相同的配置值。

总之,bootstrap.yml 文件主要用于配置应用程序的启动参数,而 application.yml 文件用于配置应用程序的全局参数。在实际项目中,可以根据需要选择使用哪个文件或者同时使用两个文件。

Spring Boot 项目可能不会直接使用 bootstrap.yml,但是在 Spring Cloud 项目中会使用它来定义一些与 Spring Cloud 组件相关的额外配置,例如服务发现和配置服务器等。

实际应用场景

在实际项目中,通常有一些推荐的最佳实践,例如: