spring-boot启动项说明
spring-boot项目每次启动时都可以看到一个SpringApplication.run()执行,而且最近有需求想要在项目启动时加载定时任务,所以研究纪录SpringApplication的启动过程
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
1.初始化监听器
初始化Spring Boot自带的监听器,以及添加到SpringApplication的自定义监听器
2.发布ApplicationStartedEvent事件
Spring Boot会发布一个ApplicationStartedEvent事件。如果你想在这个时候执行一些代码可以通过实现ApplicationListener接口实现;
public class ApplicationStartedListener implements ApplicationListener<ApplicationStartedEvent>
3.装配参数和环境
首先会初始化参数,然后装配环境,确定是web环境还是非web环境
4.发布ApplicationEnvironmentPreparedEvent事件
在装配完环境后,就触发ApplicationEnvironmentPreparedEvent事件。如果想在这个时候执行一些代码,可以订阅这个事件的监听器,方法同第二步
5.打印Banner
启动的Banner就是在这一步打印出来的
6.创建ApplicationContext
这里会根据是否是web环境,来决定创建什么类型的ApplicationContext
7.装配Context
设置Context的环境变量、注册Initializers、beanNameGenerator等
8.发布ApplicationPreparedEvent事件准备
源码中是空的,并没有真正发布ApplicationPreparedEvent事件
9.注册、加载等
注册springApplicationArguments、springBootBanner,加载资源等。
10.发布ApplicationPreparedEvent事件
真正发布了ApplicationPreparedEvent事件
11.refreshContext
装配context beanfactory等非常重要的核心组件
12.afterRefreshContext
调用自定义的Runners
13.发布ApplicationReadyEvent事件
最后一步,发布ApplicationReadyEvent事件,启动完毕,表示服务已经可以开始正常提供服务了。通常我们这里会监听这个事件来打印一些监控性质的日志,表示应用正常启动了
网友评论