springboot 中的 tomcat 启动时候的

Posted chuliang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot 中的 tomcat 启动时候的相关的知识,希望对你有一定的参考价值。

EmbeddedWebApplicationContext 的onRefresh方法

@Override
    protected void onRefresh() {
        super.onRefresh();
        try {
            createEmbeddedServletContainer();
        }
        catch (Throwable ex) {
            throw new ApplicationContextException("Unable to start embedded container",
                    ex);
        }
    }
private void createEmbeddedServletContainer() {
        EmbeddedServletContainer localContainer = this.embeddedServletContainer;
        ServletContext localServletContext = getServletContext();
        if (localContainer == null && localServletContext == null) {
            EmbeddedServletContainerFactory containerFactory = getEmbeddedServletContainerFactory();
            this.embeddedServletContainer = containerFactory
                    .getEmbeddedServletContainer(getSelfInitializer());
        }
       ……………………………………
        initPropertySources();
    }

这里有三个方法比较重要,
第一个是getEmbeddedServletContainerFactory,这个是去spring工厂获取注册的EmbeddedServletContainerFactory.class,servletContainer的工厂的注册是在
EmbeddedServletContainerAutoConfiguration,也是autoconfigure中注册的,里面根据jar包,判断是TomcatEmbeddedServletContainerFactory,JettyEmbeddedServletContainerFactory还是
UndertowEmbeddedServletContainerFactory,
第二个:TomcatEmbeddedServletContainerFactory的getEmbeddedServletContainer方法,是启动tomcat的核心,里面有实例化各个级别的容器,启动nio,连接servlet和tomcat和spring等
第三个:getSelfInitializer():返回的是一个实现了

 








以上是关于springboot 中的 tomcat 启动时候的的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot与Tomcat的启动(内嵌Tomcat)

SpringBoot中的tomcat是如何启动的?

外置Tomcat启动SpringBoot应用,日志profile功能失效

基于源码看Tomcat 在 SpringBoot 中的启动

查看SpringBoot应用中的嵌入式tomcat的版本

springboot 在tomcat中启动两次