Spring Boot 执行流程
2018-02-06 00:00
253 查看
SpringBoot执行流程
基本概述
SpringBoot将
Spring应用的启动流程进行了一个“模板化”的操作,所以我们才能通过
SpringApplication.run(XXX.class, args)的方式来进行一站式的启动。其内部逻辑也是个较复杂的过程,下文将对执行流程进行阐述。本流程参考的
SpringBoot版本为
1.4.3.RELEASE。
SpringBoot应用启动步骤简要示意图
通过上面这个简要示意图,可以看出,只要将事件通知的扩展点忽略,SpringBoot的执行流程并不是想象中那么复杂。
SpringApplicationRunListener
SpringApplicationRunListener是
SpringBoot执行过程中,不同执行时间点时间通知的监听者,一般来说也没有必要自己实现一个
SpringApplicationRunListener,即使是
SpringBoot默认也只实现了一个
org.springframework.boot.context.event.EventPublishingRunListener。通过这个类,在
SpringBoot启动时,在不同的时间点发布不同的应用事件类型
ApplicationEvent。
SpringBoot初始化时加载的
ApplicationListener如果对这些事件感兴趣,则可以接收并处理。
public interface SpringApplicationRunListener { void started(); void environmentPrepared(ConfigurableEnvironment environment); void contextPrepared(ConfigurableApplicationContext context); void contextLoaded(ConfigurableApplicationContext context); void finished(ConfigurableApplicationContext context, Throwable exception); }
ApplicationContextInitializer
通过这个类,可以在ApplicationContext调用
refresh()方法前,对
ApplicationContext对象做进一步的设置或者处理。
public interface ApplicationContextInitializer<C extends ConfigurableApplicationContext> { void initialize(C applicationContext); }
ApplicationRunner和CommandLineRunner
我们在开发中可能会有这样的情景。需要在容器启动的时候执行一些内容。比如读取配置文件,数据库连接之类的。SpringBoot给我们提供了两个接口来帮助我们实现这种需求。这两个接口分别为
CommandLineRunner和
ApplicationRunner。他们的执行时机为容器启动完成的时候。
这两个接口中有一个
run方法,我们只需要实现这个方法即可。这两个接口的不同之处在于:
ApplicationRunner中
run方法的参数为
ApplicationArguments,而
CommandLineRunner接口中
run方法的参数为
String数组。
如果有多个实现类,而你需要他们按一定顺序执行的话,可以在实现类上加上
@Order注解。
@Order(value=整数值)。
SpringBoot会按照
@Order中的
value值从小到大依次执行。
ApplicationRunner
public interface ApplicationRunner { void run(ApplicationArguments args) throws Exception; }
CommandLineRunner
public interface CommandLineRunner {
void run(String... args) throws Exception;
}
SpringBoot执行流程详细版
链接:https://pan.baidu.com/s/1mj2UiA8 密码:sxmz相关文章推荐
- SpringBoot执行流程
- spring boot filter 配置多个时,执行顺序
- spring Boot打可执行的jar包
- springmvc执行流程以及对spring应用上下文webApplicationContext理解
- Springboot在IDEA中执行,开启热部署
- SpringBoot+LayIM+t-io 实现好友申请通知流程
- springboot创建一个可执行的jar
- springboot 学习之路 9 (项目启动后就执行特定方法)
- Spring-Boot整合mybatis(二),使用阿里的druid包,进行监控SQL执行速度
- spring boot容器启动流程
- springboot jenkins 部署 通过shell执行,最后springboot启动失败
- Spring Boot学习--打包一个可执行的jar项目
- SpringBoot接入微信公众号(测试)整体流程
- spring boot 配置启动后执行sql, 中文乱码
- 【HAVENT原创】使用 Spring Boot 的 AOP 拦截器终止方法执行
- springboot打包jar包找不到jsp文件以及在linux永久执行java -jar以及springboot的多环境配置
- Spring 执行流程
- Spring Boot学习--项目启动时执行特定方法
- spring boot aop 记录方法执行时间
- Spring Boot容器加载时执行特定操作(推荐)