Spring Boot加载外部配置文件的流程是怎样的呢
Spring Boot加载外部配置文件的流程可以大致归纳为以下几个步骤:
-
启动流程开始:
- 当Spring Boot应用程序启动时,会按照其设计好的启动流程进行初始化。
-
加载
bootstrap.yml
或bootstrap.properties
(如果适用):- 如果你的应用是一个Spring Cloud应用,并且使用了Spring Cloud Config,那么首先会加载
bootstrap.yml
或bootstrap.properties
中的配置。这些配置主要用于连接到远程的配置服务器(如Spring Cloud Config Server)。 bootstrap.yml
或bootstrap.properties
的加载优先级高于application.yml
或application.properties
。
- 如果你的应用是一个Spring Cloud应用,并且使用了Spring Cloud Config,那么首先会加载
-
加载系统配置文件:
- 在加载完
bootstrap
配置文件之后(如果有的话),Spring Boot会加载系统级别的配置文件,这些文件通常位于项目的src/main/resources
目录下,文件名通常为application.yml
或application.properties
。
- 在加载完
-
通过SPI机制和消息广播机制加载用户自定义配置文件:
- 在加载系统配置文件之后,Spring Boot会使用SPI(Service Provider Interface)机制和消息广播机制来加载用户自定义的配置文件。这个过程中,
ConfigFileApplicationListener
类起到了关键作用。它会在Spring Boot启动过程中被实例化,并监听ApplicationEnvironmentPreparedEvent
事件来触发配置文件的加载。
- 在加载系统配置文件之后,Spring Boot会使用SPI(Service Provider Interface)机制和消息广播机制来加载用户自定义的配置文件。这个过程中,
-
具体配置文件加载过程:
- 在事件触发后,
ConfigFileApplicationListener
会根据配置的搜索路径和文件名称规则(如文件名前缀、后缀等)来搜索并加载用户自定义的配置文件。这些配置文件可以是YAML格式(.yml
或.yaml
)或属性格式(.properties
)。
- 在事件触发后,
-
配置文件的合并和覆盖:
- 如果在多个位置发现了同名的配置文件(如既在
bootstrap
目录下又在resources
目录下),Spring Boot会按照一定的优先级来合并这些配置。通常,bootstrap
目录下的配置优先级更高。 - 另外,用户还可以通过命令行参数、环境变量或系统属性等方式来覆盖配置文件中的属性。
- 如果在多个位置发现了同名的配置文件(如既在
-
属性注入和绑定:
- 加载完配置文件后,Spring Boot会将配置文件中的属性注入到应用程序的各个组件中。这可以通过多种方式实现,如使用
@Value
注解直接注入单个属性值,或使用@ConfigurationProperties
注解将一组属性绑定到一个配置类上。
- 加载完配置文件后,Spring Boot会将配置文件中的属性注入到应用程序的各个组件中。这可以通过多种方式实现,如使用
-
启动流程继续:
- 完成配置文件的加载和属性注入后,Spring Boot的启动流程将继续进行,包括创建应用上下文、初始化Bean等。
总结来说,Spring Boot加载外部配置文件的流程涉及多个步骤,包括加载bootstrap
配置文件、系统配置文件、用户自定义配置文件,以及配置文件的合并、覆盖和属性注入等。这个过程中,Spring Boot充分利用了其强大的扩展性和灵活性,支持从多种来源和格式加载配置,并允许用户通过多种方式覆盖和修改默认配置。