1. 概述

Spring Boot 是一个约定优于配置的框架。尽管它自带大量自动配置,但在实际开发中,我们通常还是会通过 application.properties 这类配置文件来覆盖默认行为。

然而,在使用 Spring Cloud 的项目中,你可能会发现还有一个叫 bootstrap.properties 的配置文件。这玩意儿是干啥的?跟 application.properties 又有啥区别?

本文就来 讲清楚这两个配置文件的职责划分和加载顺序,避免你在配置中心、加密配置等场景下踩坑。


2. application.properties 是什么时候用的?

application.ymlapplication.properties 的核心作用是:✅ 配置应用上下文(Application Context)

Spring Boot 启动时会自动创建一个已自动配置好的应用上下文。虽然你可以不用写任何配置就能跑起来,但大多数情况下我们都需要自定义一些属性。

Spring Boot 提供了多种方式来覆盖默认配置,优先级从高到低大致如下:

  • 命令行参数
  • JVM 系统属性(-D
  • 操作系统环境变量
  • application.properties / application.yml
  • ……

⚠️ 关键点来了:**application.properties 的优先级是最低的** —— 也就是说,它最容易被其他方式覆盖。

我们通常会在 application.properties 中配置以下几类内容:

  • 🔧 核心配置:日志、线程池等
  • 🔄 集成配置:RabbitMQ、ActiveMQ、Kafka 等中间件
  • 🌐 Web 配置:HTTP、MVC、端口、静态资源等
  • 🔐 安全配置:LDAP、OAuth2、Security 相关设置

这些都属于“应用启动后要生效”的配置,归应用上下文管。


3. bootstrap.properties 是什么时候用的?

bootstrap.ymlbootstrap.properties 的作用是:✅ 配置引导上下文(Bootstrap Context)

这个上下文是 Spring Cloud 特有的概念,普通 Spring Boot 项目压根不会加载它。

引导上下文是干啥的?

简单粗暴地说:它是应用上下文的“爹”

当 Spring Cloud 应用启动时,会先创建一个 bootstrap context,它的主要任务有:

  • 从外部配置中心(如 Config Server)拉取配置
  • 解密加密的配置项(比如用 JCE 加密的密码)
  • 把获取到的配置提前加载进 Environment

⚠️ 注意:bootstrap context 先于 application context 加载,所以它里面的配置更“早”,也更“基础”。

两个上下文的关系

维度 bootstrap context application context
职责 加载外部配置、解密 构建 Bean、启动 MVC 等
父子关系 是 application 的父上下文 子上下文
共享环境 ✅ 共享同一个 Environment 实例
配置文件 bootstrap.properties / bootstrap.yml application.properties / application.yml

📌 举个例子:你想从 Git 仓库拿配置,那首先得知道 Config Server 的地址、认证信息。这些“元配置”不可能写在 application.properties 里——因为那个文件本身都还没加载呢!

所以,这类“启动前就必须知道”的配置,就得放在 bootstrap.properties 里。


4. 快速示例

来看一个典型的 bootstrap.properties 配置:

spring.application.name=config-client
spring.profiles.active=development
spring.cloud.config.uri=http://localhost:8888
spring.cloud.config.username=admin
spring.cloud.config.password=secure123
spring.cloud.config.fail-fast=true
management.security.enabled=false

每行解释:

  • spring.application.name=config-client
    ➤ 告诉 Config Server:我要拉的是哪个应用的配置
  • spring.profiles.active=development
    ➤ 激活 development 环境,拉对应 profile 的配置
  • spring.cloud.config.uri=http://localhost:8888
    ➤ Config Server 地址
  • spring.cloud.config.username/admin 和密码
    ➤ 访问 Config Server 的认证信息
  • spring.cloud.config.fail-fast=true
    ➤ 如果 Config Server 连不上,直接启动失败,别苟延残喘
  • management.security.enabled=false
    ➤ (老版本)关闭管理端点安全,方便调试

✅ 这些配置必须在应用启动初期就准备好,否则连配置都拿不到,后面全白搭。


5. 总结

对比项 bootstrap.properties application.properties
所属上下文 Bootstrap Context(父) Application Context(子)
加载时机 ❗最早加载,启动初期 稍后加载
主要用途 配置如何获取外部配置(如 Config Server 地址) 配置应用自身行为
是否共享 Environment ✅ 是,两者共享
是否必需 ❌ Spring Boot 单体项目不需要 ✅ 几乎所有项目都有
文件优先级 更高(先加载) 相对较低

🔚 一句话总结

bootstrap.properties 是用来“找配置的配置”,而 application.properties 是“找到之后用的配置”。

如果你在用 Spring Cloud Config、Vault、加密配置等功能,不搞清楚这个区别,迟早要踩坑。记住:先有 bootstrap,才有 application


原始标题:Spring Configuration Bootstrap vs Application Properties | Baeldung