美文网首页
SpringApplication启动流程

SpringApplication启动流程

作者: 雨中漫步的北极熊 | 来源:发表于2019-03-09 17:01 被阅读0次
    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事件,启动完毕,表示服务已经可以开始正常提供服务了。通常我们这里会监听这个事件来打印一些监控性质的日志,表示应用正常启动了

    流程图如下所示
    springapplicationflow.png

    相关文章

      网友评论

          本文标题:SpringApplication启动流程

          本文链接:https://www.haomeiwen.com/subject/iuaspqtx.html