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应用的配置。