SpringApplication
public ConfigurableApplicationContext run(String... args) {
// 创建 AnnotationConfigServletWebServerApplicationContext, 后面创建tomcat
context = createApplicationContext();
...
refresh();
...
}
ServletWebServerApplicationContext
public void refresh() throws BeansException, IllegalStateException {
...
onRefresh();
...
}
protected void onRefresh() {
super.onRefresh();
try {
createWebServer();
}
catch (Throwable ex) {
throw new ApplicationContextException("Unable to start web server", ex);
}
}
private void createWebServer() {
ServletWebServerFactory factory = getWebServerFactory();
factory.getWebServer(getSelfInitializer());
}
TomcatServletWebServerFactory
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);
}