范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

SpringBoot启动流程

  SpringBoot启动流程我们简单的先介绍一下SpringBoot的启动流程都需要哪些步骤 	1.加载配置文件 	2.准备上下文环境 	3.创建上下文对象 	4.启动spring 	5.启动tomcat
  我们先来看一下springboot的启动流程图
  SpringBoot启动流程图
  下面附上源码,我们从 SpringApplication.run(WebApplicaiton.class,args); 开始进入
  找到SpringApplication下的run方法。在代码中都有注释标注,相信大家都可以看懂 public ConfigurableApplicationContext run(String... args) {    long startTime = System.nanoTime();    DefaultBootstrapContext bootstrapContext = createBootstrapContext();    ConfigurableApplicationContext context = null;    //设置了一个名为java.awt.headless的系统属性    configureHeadlessProperty();    //获取监听器 所有实现SpringApplicationRunListener这个接口的监听器    SpringApplicationRunListeners listeners = getRunListeners(args);    //调用监听器里所有写的starting方法    listeners.starting(bootstrapContext, this.mainApplicationClass);    try {       ApplicationArguments applicationArguments = new DefaultApplicationArguments(args);       //准备上下文的环境       ConfigurableEnvironment environment = prepareEnvironment(listeners, bootstrapContext, applicationArguments);       configureIgnoreBeanInfo(environment);       //启动的图标       Banner printedBanner = printBanner(environment);       //创建上下文的对象       context = createApplicationContext();       context.setApplicationStartup(this.applicationStartup);       prepareContext(bootstrapContext, context, environment, listeners, applicationArguments, printedBanner);       //进入到spring的容器方法       refreshContext(context);       afterRefresh(context, applicationArguments);       Duration timeTakenToStartup = Duration.ofNanos(System.nanoTime() - startTime);       if (this.logStartupInfo) {          new StartupInfoLogger(this.mainApplicationClass).logStarted(getApplicationLog(), timeTakenToStartup);       }       //调用了监听器的started方法       listeners.started(context, timeTakenToStartup);       callRunners(context, applicationArguments);    }    catch (Throwable ex) {       handleRunFailure(context, ex, listeners);       throw new IllegalStateException(ex);    }    try {        //计算springboot启动耗时       Duration timeTakenToReady = Duration.ofNanos(System.nanoTime() - startTime);       //执行监听器的ready方法       listeners.ready(context, timeTakenToReady);    }    catch (Throwable ex) {       handleRunFailure(context, ex, null);       throw new IllegalStateException(ex);    }    return context; }
  我们再走到prepareContext方法中 private void prepareContext(DefaultBootstrapContext bootstrapContext, ConfigurableApplicationContext context,       ConfigurableEnvironment environment, SpringApplicationRunListeners listeners,       ApplicationArguments applicationArguments, Banner printedBanner) {    context.setEnvironment(environment);    postProcessApplicationContext(context);    applyInitializers(context);    //设置完环境变量 监听器会调用的方法    listeners.contextPrepared(context);    bootstrapContext.close(context);    if (this.logStartupInfo) {       logStartupInfo(context.getParent() == null);       logStartupProfileInfo(context);    }    // Add boot specific singleton beans    ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();    beanFactory.registerSingleton("springApplicationArguments", applicationArguments);    if (printedBanner != null) {       beanFactory.registerSingleton("springBootBanner", printedBanner);    }    if (beanFactory instanceof AbstractAutowireCapableBeanFactory) {       ((AbstractAutowireCapableBeanFactory) beanFactory).setAllowCircularReferences(this.allowCircularReferences);       if (beanFactory instanceof DefaultListableBeanFactory) {          ((DefaultListableBeanFactory) beanFactory)                .setAllowBeanDefinitionOverriding(this.allowBeanDefinitionOverriding);       }    }    if (this.lazyInitialization) {       context.addBeanFactoryPostProcessor(new LazyInitializationBeanFactoryPostProcessor());    }    // Load the sources    Set sources = getAllSources();    Assert.notEmpty(sources, "Sources must not be empty");    load(context, sources.toArray(new Object[0]));    //调用监听器的contextLoaded方法    listeners.contextLoaded(context); }``` 然后我们找到refreshContext方法  ```java 	private void refreshContext(ConfigurableApplicationContext context) { 		if (this.registerShutdownHook) { 			shutdownHook.registerApplicationContext(context); 		} 		refresh(context); 	}
  进入到ServletWebServerApplicationContext类下的refresh方法 @Override public final void refresh() throws BeansException, IllegalStateException {    try {        //进入到了spring容器       super.refresh();    }    catch (RuntimeException ex) {       WebServer webServer = this.webServer;       if (webServer != null) {          webServer.stop();       }       throw ex;    } }
  我会在之后的文章中更新在springboot启动的过程中是如何加载配置以及tomcat是如何启动的。相信大家在结合流程图看源码一定会很清晰的…
宝骏KiWiEV开启预售预售价6。98万起日前,宝骏官方宣布宝骏KiWiEV正式开启预售,该车提供设计师和艺术家两个版本,预售价格分别为6。98万元和7。88万元。据了解,购买新车消费者可以享受24期0利息三年免费道路救援红旗H9申报图曝光尺寸全面超越奔驰S级日前,从工信部最新一期的申报目录了解到,一汽红旗新款红旗H9的申报图曝光,根据申报信息了解到,新款红旗H9车长为5337mm,新车有望在年内推出。外观上来看,新车整体设计与现款H9网传涉及A4L等车型奥迪因芯片短缺导致停产系假新闻刚刚,网传一张涉及A4L等车型奥迪因芯片短缺导致停产的新闻消息,针对此事,我们向奥迪内部人士进行了确认,经过确认后了解到,该网传消息为假新闻,请大家勿听信谣传,一切以官方发布的通告中消会2021中国车内气味研究报告阶段性研究成果发布7月30日,中国消费品质量安全促进会(以下简称中消会)以线下和线上直播的形式发布了2021中国车内气味研究报告阶段性研究成果。从此次车内气味研究报告中了解到,截止2021年6月底,全新宝马M2假想图曝光搭载3。0T发动机日前,从海外了解到,全新宝马M2的假想图曝光,新车将采用后驱设计,全新宝马M2有望继续搭载3。0T六缸发动机,最大功率将超过368kW(500马力),传动方面匹配双离合变速箱。外观全新奇骏今晚上市新车预售19。99万起,现场图抢先实拍7月30日晚,全新一代东风日产奇骏正式上市。目前,新车预售价格分别为19。99万元和21。99万元,上市车型全系搭载1。5T三缸发动机,分为两轮驱动版和四轮驱动版。在外观造型设计上东风风行菱智PLUS旅行版将于8月11日正式上市日前,从东风风行官方获悉,旗下中大型MPV菱智PLUS旅行版将于8月11日正式上市,此外,菱智PLUSCNG版车型将于9月上市。新车在外观设计上延续了现款车型的造型风格,细节上有所全新奇骏正式上市新车售价区间18。19万26。29万元7月30日晚,全新一代东风日产奇骏正式上市。此次上市新车推出2个版本车型,分别为VCTurbo超变擎3002WD与VCTurbo超变擎3004WD,共8款车型,新车售价区间为18。宝马iNext预量产车路试谍照曝光新车明年将上市日前,从海外了解到一组BMWVisioniNext概念车的路试谍照,新车在车型定位上将定位于旗舰中大型SUV车型。新车在外观设计上沿用了宝马现款车型比较有科技感的造型风格,宽大的进长城汽车发布7月产销快报WEY品牌销量同比下滑43。51日前,长城汽车发布了7月份各个品牌的产销数据快报,数据显示,长城汽车哈弗品牌一直持续销量稳定,哈弗H6产品车型,月销量也一直处于国内紧凑级SUV市场销量排行榜首位,这对哈弗品牌来讲成都车展长城坦克500新车现场实拍最后有惊喜在成都车展上,长城汽车坦克品牌带来了坦克500这款新车,此前新车命名为坦克600,更名之后现场关注的人数依旧不少,直接来看现场的实拍效果吧,其中为了了解这款车,媒体老师们真的是煞费
2021年中国消费者全健康需求洞察健康需求丨洞察报告核心摘要概念定义全健康,OneHealth,是系统性地思考和研究人类健康动物健康以及环境健康的新策略新方法和新学科,它强调全生态全产业链的健康,覆盖用户健康雇员健2021年中国企业服务研究报告核心摘要ToC流量见顶后,ToB服务,即企业服务一直是大家关注的重点。但是,企业服务的市场增量与变量在哪里,如何做好企业服务,企业服务在不同的行业中表现出了哪些具体特点,市场并未有2021年中国碳中和行业研究报告碳中和丨研究报告前言复活节岛位于南太平洋东部,向东距离智利大陆本土约3600公里,荷兰航海家罗赫芬于1722年4月5日复活节发现并登上该岛,该岛因此而得名。复活节岛因巨大的石雕像和2021年中国游戏直播行业研究报告游戏直播丨洞察报告核心摘要行业监管游戏直播反垄断靴子落地,虎牙和斗鱼被依法禁止合并。游戏直播行业将在更充分的市场竞争和政策指引下,继续稳步健康发展。市场规模2020年中国整体游戏直2021年中国文博IP商业化研究报告文博IP丨研究报告核心摘要行业背景近年我国政策逐渐放开对博物馆商业化的限制,持续刺激和支持文博产业化发展,同时伴随数字化技术发展知识产权保护力度增强居民文化消费能力提高等因素,我国2021年中国家装行业研究报告家装行业丨研究报告核心摘要家装产业链不断进阶家装流程冗长,专业壁垒较高,传统家装行业效率低下,产品和服务形态单一,无法满足新时代环境下的消费升级背景。随着互联网时代的到来,互联网家2021年中国视频云场景应用洞察白皮书核心摘要碎片化的消费模式极致的观感需求创新应用场景,让短视频超高清视频和实时音视频成为需求风口。视频云为行业提供技术支撑,AI赋能全链条,实现全民生产全域应用,行业步入视频服务社会2021年房产交易服务行业NPS研究案例居理买房网核心摘要房产行业主战场由上游开发商向中游经纪平台演进,打造高水准的惊喜购房体验成为业内真命题。其中,新房经纪市场前景广阔,二手房交易市场良田待耕。家亦非家房子兼顾安家的精神属性,和今天杭州飞白云机场,两个人一个月10000多今天在飞机快落地的时候拍到了这个角度的夕阳,好美。可能是出差的缘故,也经常刷到出差人的头条,感觉比我们补助少的基本没有了,好可怜,200一天,吃住。不过我的工资在我们公司售后部又已2021年二季度全球手机出货量排名,小米首次超苹果2021年第二季度全球总共卖出3。2亿只智能手机。三星因其强大的供应链控制能力,已经数十年稳居第一。让人以外的人,小米集团在第二季度,销量大幅增长,达到了5100万台手机。首次超越都说小米cv颜值高,性能如何?778g处理器性能表现8分很多小伙伴都想问,小米civi采用了什么处理器?处理器7分小米civi搭载了6nm制成工艺的高通骁龙778处理器。属于中高端处理器。安兔兔跑分53万,性能