SpringCloud入门之常用的配置文件 application.yml和 bootstrap.yml区别

发布于:2024-06-18 ⋅ 阅读:(18) ⋅ 点赞:(0)

 1. 加载时机

- bootstrap.yml
  - 在Spring应用程序启动的早期阶段加载,早于application.yml。
  - 它主要用于加载应用程序的上下文或环境设置,例如配置中心的地址、加密解密信息等。
  - 通常在ApplicationContext初始化之前加载,因此适用于早期的配置设置。

- application.yml
  - 在ApplicationContext初始化时加载。
  - 用于定义应用程序的配置参数,例如数据库连接、端口、日志级别等。
  - application.yml 可以覆盖 bootstrap.yml 中的配置,但它本身是加载较晚的。

 2. 用途

- bootstrap.yml
  - 主要用于Spring Cloud的特定场景,如:
    - 配置中心(如Spring Cloud Config)的位置和凭据。
    - 应用程序名称(spring.application.name)。
    - 加密/解密的密钥配置。
    - 与环境相关的属性,如配置文件激活和环境变量等。
  - 常用于服务发现、配置管理等需要在应用程序上下文初始化之前生效的配置。

- application.yml
  - 用于定义应用程序运行时的配置,这些配置通常是业务相关的,如:
    - 数据源配置。
    - 消息队列配置。
    - 日志级别和格式。
    - 其他应用程序特定的设置。
  - 大多数情况下,应用程序的主要配置都放在 application.yml 中。

 3. 覆盖优先级

- bootstrap.yml
  - 它的配置具有较高的优先级,尤其是涉及到早期初始化的属性。
  - 由于它在 application.yml 之前加载,因此可以用于设置在应用程序启动时就必须确定的属性。

- application.yml
  - 它的配置优先级稍低于 bootstrap.yml。
  - application.yml 中的配置可以覆盖 bootstrap.yml 的配置,但仅限于在上下文初始化后加载的配置。

 示例场景

- bootstrap.yml 示例:
  yaml
  spring:
    application:
      name: my-service
    cloud:
      config:
        uri: http://config-server:8888
        fail-fast: true
    profiles:
      active: dev
  
  - 在这个示例中,bootstrap.yml 配置了应用程序的名称和配置中心的地址。这些信息需要在应用启动之前就加载,以便从配置中心获取其他配置信息。

- application.yml 示例:
  yaml
  server:
    port: 8080
  logging:
    level:
      root: INFO
  spring:
    datasource:
      url: jdbc:mysql://localhost:3306/mydb
      username: user
      password: password
  
  - 在这个示例中,application.yml 配置了服务器端口、日志级别和数据源信息。这些配置与应用的运行环境紧密相关。

 适用场景

- bootstrap.yml
  - 当需要在应用启动前进行配置加载时,如从远程配置中心获取配置信息或设置一些关键的启动参数。
  - 在Spring Cloud Config中使用时尤为常见。

- application.yml
  - 用于定义应用的常规配置,包括运行时所需的各种设置和参数。
  - 适用于大多数Spring Boot应用的配置需求。

 结合使用

在实际项目中,bootstrap.yml 和 application.yml 可以结合使用。常见的模式是:
- 在 bootstrap.yml 中配置需要早期加载的参数,如应用名称、配置中心地址等。
- 在 application.yml 中配置应用程序的业务逻辑相关参数,如数据库连接、缓存设置等。

这样可以充分利用两者的优势,确保应用程序在启动过程中能够顺利加载所有必要的配置。

总结起来,bootstrap.yml 和 application.yml 各有其特定的用途和加载时机,正确理解和使用它们能够帮助开发者更好地管理Spring Cloud应用的配置。