-
加载顺序
bootstrap.yaml
(或bootstrap.yml
):- 这个配置文件会在应用程序上下文(
ApplicationContext
)加载之前被加载。它主要用于加载一些对应用程序启动至关重要的配置信息,例如配置中心(如 Spring Cloud Config Server)的位置、加密 / 解密信息等。因为这些配置信息通常是应用程序启动初期就需要用到的,比如应用需要从配置中心获取其他配置,就必须先知道配置中心的地址,这个地址就可以在bootstrap.yaml
中设置。
- 这个配置文件会在应用程序上下文(
application.yaml
(或application.yml
):- 它是在应用程序上下文加载时被加载的,加载顺序在
bootstrap.yaml
之后。这个文件用于定义应用程序的大部分业务相关的配置,比如数据库连接配置、服务端口号、日志级别等。这些配置是应用在运行过程中具体业务逻辑所需要的配置信息。
- 它是在应用程序上下文加载时被加载的,加载顺序在
-
用途侧重点
bootstrap.yaml
:- 更侧重于系统级别的配置和外部化配置的引导。它用于配置应用和外部配置源(如配置服务器)的连接信息,使得应用能够正确地从外部获取其他配置。另外,在一些场景下,比如使用 Spring Cloud 进行微服务开发时,
bootstrap.yaml
还用于配置服务注册与发现相关的信息,如 Eureka 或 Nacos 的配置等,这些配置对于服务能够正确地注册到注册中心并被发现是非常关键的。
- 更侧重于系统级别的配置和外部化配置的引导。它用于配置应用和外部配置源(如配置服务器)的连接信息,使得应用能够正确地从外部获取其他配置。另外,在一些场景下,比如使用 Spring Cloud 进行微服务开发时,
application.yaml
:- 主要用于应用程序自身的业务配置。例如,在一个 Web 应用中,
application.yaml
可以配置 Spring MVC 的相关参数,如视图解析器的配置、静态资源路径等。对于数据库访问,它可以配置数据源的具体细节,如数据库连接池的大小、数据库驱动等信息,这些配置直接影响到应用程序如何进行业务数据的访问和处理。
- 主要用于应用程序自身的业务配置。例如,在一个 Web 应用中,
-
配置覆盖规则
- 当
bootstrap.yaml
和application.yaml
中存在相同的配置项时,一般情况下,bootstrap.yaml
中的配置会优先被加载并且在加载application.yaml
时,如果没有特殊的配置覆盖机制,bootstrap.yaml
中的配置不会被覆盖。不过,具体的覆盖规则也可以根据应用所使用的框架和配置加载策略进行调整。例如,在某些情况下,可以通过特定的配置属性或者环境变量来改变这种默认的覆盖规则,使得application.yaml
中的配置能够覆盖bootstrap.yaml
中的相同配置项。
- 当
-
应用场景示例
bootstrap.yaml
场景:- 假设我们有一个微服务架构的应用,使用 Spring Cloud Config Server 来集中管理配置。在
bootstrap.yaml
中,我们会配置 Config Server 的地址,如下:spring: cloud: config: uri: http://config-server:8888
- 假设我们有一个微服务架构的应用,使用 Spring Cloud Config Server 来集中管理配置。在
- 这样,应用在启动时就能够根据这个地址去 Config Server 获取其他配置文件,这个配置对于应用能否正确获取后续的配置是至关重要的,所以放在
bootstrap.yaml
中。 application.yaml
场景:- 在同一个微服务应用中,
application.yaml
可以配置服务自身的业务相关信息,如服务端口号和数据库连接信息。例如:server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: root password: password
这里配置了服务运行的端口为
8080
,以及数据库连接的相关信息,这些是应用在运行过程中进行业务操作(如提供 Web 服务、访问数据库等)所需要的配置,所以放在application.yaml
中。
- 在同一个微服务应用中,
: