详解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将系统配置和业务配置分开,这样可以有效的提高应用程序的灵活性和可维护性。如果还有任何问题或建议,欢迎留言讨论。