详解Spring Boot中的bootstrap.yml

SpringBoot作为现在比较流行的Java应用程序框架,支持了各种的通过配置文件来定义灵活配置的操作,而bootstrap.yml配置文件是Spring Boot配置管理体系中的一个重要的配置文件,与application.yml配置文件配合使用共同构建起SpringBoot配置文件体系。下面我们就来详细介绍一下这个配置文件。

什么是 bootstrap.yml?

bootstrap.yml是Spring Boot在启动阶段需要加载的第一个配置文件,一般用来初始化框架中的比较重要的参数配置,与application.yml配置文件不同bootstrap.yml文件可以从外部的配置中心上去加载配置项设置,并且比application.yml的有限级更高。

由于bootstrap.yml配置文件是在应用程序上下文加载之前被读取,所以可以用来配置一些在上下文加载之前的初始化参数,例如比较常见的加密/解密密钥、配置中心地址等,另外在分布式的配置环境中,也可以支持配置的集中化管理。

bootstrap.yml 的加载流程

Spring Boot的配置加载一般分为两个阶段,如下所示。

  • Bootstrap Context:用于加载 bootstrap.yml 文件。
  • Application Context:用于加载 application.yml 文件。

其中bootstrap.yml的配置内容会先被加载到一个独立的上下文Bootstrap Context中,然后将其中的属性注入到主应用程序上下文Application Context中。也就是说在Spring Boot中会按照如下的配置文件加载顺序来进行加载配置。

1、命令行参数。
2、bootstrap.yml 或 bootstrap.properties。
3、application.yml 或 application.properties。
4、其他配置来源(如环境变量、JVM 参数等)。

bootstrap.yml 的常见用途

bootstrap.yml配置文件的常用的使用场景有如下一些。

配置中心客户端

我们见过在很多Spring Boot的微服务项目中,都是通过bootstrap.yml配置文件来配置Spring Cloud Config的客户端用来提前加载一些配置文件。如下所示。

spring:
  application:
    name: my-service # 服务名称,用于注册到配置中心
  cloud:
    config:
      uri: http://config-server:8888 # 配置中心的地址
      profile: dev # 配置文件的环境,例如 dev、prod
      label: master # 配置中心的分支,例如 master、main

加密解密操作

在一些配置文件中可能需要对数据库、缓存或者是一些其他的配置进行敏感数据加密的操作,这个时候,我们就可以利用bootstrap.yml来配置一些前置的加解密密钥,如下所示。

encrypt:
  key: my-encryption-key # 用于解密的密钥

配置分组

在分布式环境中,可能会涉及到多个环境的应用部署,在默认情况下我们可以通过bootstrap.yml来设置默认的环境变量和默认的加载配置文件,如下所示。

spring:
  profiles:
    active: dev # 设置当前激活的环境
  application:
    name: example-service

当在项目实际进行启动的时候,spring.profiles.active可以被命令行参数覆盖,如下所示。

java -jar app.jar --spring.profiles.active=prod

bootstrap.yml 的示例

下面我们给出一个bootstrap.yml的综合示例代码

spring:
  application:
    name: demo-app
  cloud:
    config:
      uri: http://localhost:8888
      profile: dev
      label: main
  profiles:
    active: dev

encrypt:
  key: secret-key

在这个配置中

  • spring.application.name 指定了应用名称。
  • spring.cloud.config 配置了远程配置中心的信息。
  • spring.profiles.active 激活了 dev 环境。
  • encrypt.key 定义了加密密钥。

bootstrap.yml 和 application.yml 的区别

总结

bootstrap.yml是在Spring Boot的配置体系中一个关键的配置文件,主要用于在项目启动初始化阶段进行一些关键配置的加载操作。在构建复杂应用程序时,我们可以通过bootstrap.yml将系统配置和业务配置分开,这样可以有效的提高应用程序的灵活性和可维护性。如果还有任何问题或建议,欢迎留言讨论。