springboot 启动加载顺序
概述
Spring Boot的启动加载顺序是一个涉及多个步骤和组件的过程。以下是按照主要阶段和关键步骤划分的Spring Boot启动加载顺序的概述:
-
启动准备阶段:
- 装载核心启动器类:
org.springframework.boot.SpringApplication
。 - 通过构造函数创建
SpringApplication
实例时,进行一系列的初始化工作,包括:- 判断并设置web环境类型(如SERVLET、REACTIVE等)。
- 使用
SpringFactoriesLoader
加载ApplicationContextInitializer
和ApplicationListener
。 - 推断并设置主配置类(primary sources)。
- 装载核心启动器类:
-
配置加载阶段:
- Spring Boot项目会按照特定的顺序加载配置文件,这些配置文件可以是
application.properties
或application.yml
格式。 - 配置文件的加载顺序(优先级由高到低):
file:./config/
(项目根路径下的config文件夹)file:./
(项目根路径)classpath:/config/
(类路径下的config文件夹)classpath:/
(类路径)
- 外部配置文件的加载方式:
- 命令行参数:可以直接在启动命令后添加启动参数。
spring.config.location
:用于指定配置文件的新位置。
- 如果多个文件有相同的key,高优先级的值会覆盖低优先级的值。
- Spring Boot项目会按照特定的顺序加载配置文件,这些配置文件可以是
-
上下文准备阶段:
- 准备并刷新应用上下文(Context)。
- 加载所有的初始化器(如从
META-INF/spring.factories
配置文件中加载的)。 - 加载所有的监听器(也是从
META-INF/spring.factories
配置文件中加载的)。
-
启动执行阶段:
- 触发所有
CommandLineRunner
执行。 - 执行自定义的初始化逻辑(如果有的话)。
- 触发所有
-
完成阶段:
- 启动完成,等待退出。
注意事项
- 带profile的配置文件(如
application-dev.yml
)通常具有比不带profile的配置文件(如application.yml
)更高的优先级。 - 如果使用Spring Boot的自动配置机制,那么会有一系列自动配置类根据条件进行加载和配置。
- 具体的启动加载顺序可能会因Spring Boot版本和具体配置而有所不同,但整体流程是类似的。
通过清晰地了解Spring Boot的启动加载顺序,可以更好地理解和控制应用的启动过程,以及如何进行配置和扩展。