我一直很好奇 spring boot 以哪种方式 启动的 tomcat  今天 特地跟踪了一下

大家都知道 spring 容器很核心的 方式 是org.springframework.context.support.AbstractApplicationContext#refresh 这个方法

其中 

            try {
                // Allows post-processing of the bean factory in context subclasses.
                postProcessBeanFactory(beanFactory);

                // Invoke factory processors registered as beans in the context.
                invokeBeanFactoryPostProcessors(beanFactory);

                // Register bean processors that intercept bean creation.
                registerBeanPostProcessors(beanFactory);

                // Initialize message source for this context.
                initMessageSource();

                // Initialize event multicaster for this context.
                initApplicationEventMulticaster();

                // Initialize other special beans in specific context subclasses.
                onRefresh();

                // Check for listener beans and register them.
                registerListeners();

                // Instantiate all remaining (non-lazy-init) singletons.
                finishBeanFactoryInitialization(beanFactory);

                // Last step: publish corresponding event.
                finishRefresh();
            }

调用的是 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext#onRefresh

ps:在 springApplication.run 方法中 已jar包运行 启动的为org.springframework.boot.AnnotationConfigServletWebServerApplicationContext 这个上线文容器

@Override
    protected void onRefresh() {
        super.onRefresh();
        try {
            createWebServer();
        }
        catch (Throwable ex) {
            throw new ApplicationContextException("Unable to start web server", ex);
        }
    }

然后 是 org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory#getWebServer 

@Override
    public WebServer getWebServer(ServletContextInitializer... initializers) {
        Tomcat tomcat = new Tomcat();
        File baseDir = (this.baseDirectory != null ? this.baseDirectory
                : createTempDir("tomcat"));
        tomcat.setBaseDir(baseDir.getAbsolutePath());
        Connector connector = new Connector(this.protocol);
        tomcat.getService().addConnector(connector);
        customizeConnector(connector);
        tomcat.setConnector(connector);
        tomcat.getHost().setAutoDeploy(false);
        configureEngine(tomcat.getEngine());
        for (Connector additionalConnector : this.additionalTomcatConnectors) {
            tomcat.getService().addConnector(additionalConnector);
        }
        prepareContext(tomcat.getHost(), initializers);
        return getTomcatWebServer(tomcat);
    }

 

相关文章:

  • 2022-12-23
  • 2021-06-06
  • 2021-11-14
  • 2021-10-07
  • 2021-10-16
  • 2021-05-31
  • 2021-09-09
  • 2021-05-03
猜你喜欢
  • 2022-01-22
  • 2022-12-23
  • 2021-05-24
  • 2020-07-14
  • 2022-12-23
  • 2021-11-14
  • 2021-06-01
相关资源
相似解决方案