Springboot 2启动源码流程
2019-08-16 12:36:27来源:博客园 阅读 ()
Springboot 2启动源码流程
以使用静态方法SpringApplication.run(Bootstrap.class, args)
启动 Springboot 为例,启动流程主要分为 SpringApplication 的创建和运行两部分;
创建
- 设置资源加载器,此处为空
- 设置 Springboot 启动类
- 根据类路径判断 web 类型,默认为 SERVLET->Spring MVC
- 读取每个 jar 包的 /META-INF/spring.factories 文件,获取 key 为 org.springframework.context.ApplicationContextInitializer 的值,即初始化器
- 读取每个 jar 包的 /META-INF/spring.factories 文件,获取 key 为 org.springframework.context.ApplicationListener 的值,即监听器
- 从当前的运行时堆栈元素中,找到 main 方法所在类
运行
- 启动计时秒表
- 读取每个 jar 包的 /META-INF/spring.factories 文件,获取 key 为 org.springframework.boot.SpringApplicationRunListener 的值,即 Springboot 的运行监听器,默认有 EventPublishingRunListener
- 启动监听器,使用事件派发器向监听器派发 ApplicationStartingEvent 事件
- 根据命令行参数 args 初始化 DefaultApplicationArguments
- 获取环境配置,绑定到 Spring 应用,并派发 ApplicationEnvironmentPreparedEvent 事件
- 配置 spring.beaninfo.ignore 指定的可以忽略的 Bean
- 打印 Banner
- 根据 web 类型创建上下文,默认为 AnnotationConfigServletWebServerApplicationContext
- 读取每个 jar 包的 /META-INF/spring.factories 文件,获取 key 为 org.springframework.boot.SpringBootExceptionReporter 的值,即失败分析器,默认有 FailureAnalyzers
- 准备上下文,即给它配置属性,回调初始化器,并派发 ApplicationPreparedEvent 事件
- 刷新容器,创建 Bean 的过程,调用 refresh() 方法,见 Spring 源码总结
- 刷新后的处理,空方法,子类可以实现该方法做额外的处理
- 停止秒表,打印启动时长
- 派发 ApplicationStartedEvent 事件
- 调用 ApplicationRunner、CommandLineRunner 的实现方法
- 派发 ApplicationReadyEvent 事件
- 如果启动过程发生异常,派发 ApplicationFailedEvent 事件,并执行失败分析器
一些初始化器和监听器的作用
初始化器
- DelegatingApplicationContextInitializer:获取环境配置 context.initializer.classes 指定的初始化器。
- ContextIdApplicationContextInitializer:初始化 Spring 应用名 ID:profile:PORT。(spring.application.name:spring.profiles.active:spring.application.name)
- ConfigurationWarningsApplicationContextInitializer:初始化配置检查,输出警告日志。
- ServerPortInfoApplicationContextInitializer:初始化对 WebServerInitializedEvent 事件的监听,将监听器添加到派发器
- SharedMetadataReaderFactoryContextInitializer:初始化元数据读取和缓存的后置处理器 CachingMetadataReaderFactoryPostProcessor。
监听器
- ConfigFileApplicationListener:加载默认路径下的配置文件。
- AnsiOutputApplicationListener:监听 spring.output.ansi.enabled 是否配置了彩色输出日志。always:启用彩色输出;ever禁用彩色输出;detect:(默认)自动检测。
- LoggingApplicationListener:配置日志系统。
- ClasspathLoggingApplicationListener:打印程序开始启动和启动失败 classpath 的 debug 日志。
- BackgroundPreinitializer:起一个后台线程触发早期的初始化器,包括校验器、消息转换器等。(MessageConverterInitializer、MBeanFactoryInitializer、ValidationInitializer、JacksonInitializer、ConversionServiceInitializer)
- DelegatingApplicationListener:获取环境配置 context.listener.classes 指定的监听器
- ParentContextCloserApplicationListener:如果父关闭了,则关闭应用程序上下文。它监听 refresh 事件来获取上下文,监听到关闭事件后进行传播。
- FileEncodingApplicationListener:如果系统文件和环境中配置的编码不匹配,则停止应用程序。
- ClearCachesApplicationListener:上下文加载后清理缓存。
原文链接:https://www.cnblogs.com/bigshark/p/11355655.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
- nacos~配置中心功能~springboot的支持 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash