Spring Boot 內(nèi)置了 Tomcat 啟動(dòng)的原理
Spring Boot的一個(gè)核心理念是簡(jiǎn)化應(yīng)用的創(chuàng)建和部署。為了達(dá)到這一目標(biāo),Spring Boot內(nèi)置了一個(gè)嵌入式的Servlet容器(默認(rèn)是Tomcat)來(lái)簡(jiǎn)化部署流程。這意味著開(kāi)發(fā)者可以創(chuàng)建一個(gè)“可執(zhí)行的”JAR或WAR文件,不需要外部的Servlet容器就可以運(yùn)行Web應(yīng)用。下面是這個(gè)原理的詳細(xì)解釋?zhuān)?/p>
依賴管理:
在Spring Boot的starter POMs中,包含了Tomcat的嵌入式依賴。當(dāng)你加入
spring-boot-starter-web
依賴時(shí),默認(rèn)也加入了Tomcat。xmlCopy code
<dependency>?<groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>?</dependency>
自動(dòng)配置:
Spring Boot的自動(dòng)配置特性會(huì)檢查類(lèi)路徑上的依賴,并自動(dòng)配置應(yīng)用。在
spring-boot-autoconfigure
的jar包中,有一個(gè)TomcatAutoConfiguration
類(lèi),當(dāng)Spring Boot檢測(cè)到類(lèi)路徑上有Tomcat的相關(guān)依賴并且沒(méi)有其他的Servlet容器配置時(shí),這個(gè)配置類(lèi)會(huì)被自動(dòng)應(yīng)用。創(chuàng)建與啟動(dòng)內(nèi)嵌的Tomcat:
Spring Boot的
SpringApplication
類(lèi)會(huì)自動(dòng)創(chuàng)建和啟動(dòng)內(nèi)嵌的Tomcat實(shí)例。在背后,TomcatAutoConfiguration
會(huì)創(chuàng)建一個(gè)TomcatServletWebServerFactory
,它負(fù)責(zé)配置、創(chuàng)建和啟動(dòng)Tomcat。代碼例子:
javaCopy code
// SpringApplication會(huì)執(zhí)行以下操作?WebServer?webServer?=webServerFactory.getWebServer(webApplication); webServer.start();
部署應(yīng)用到內(nèi)嵌的Tomcat:
Spring Boot應(yīng)用的Servlet上下文會(huì)被自動(dòng)部署到內(nèi)嵌的Tomcat上。
“可執(zhí)行的”JAR/WAR:
通過(guò)Spring Boot Maven插件或Gradle插件,你可以創(chuàng)建一個(gè)“可執(zhí)行的”JAR或WAR文件。這意味著JAR/WAR文件包含了所有的依賴,包括Tomcat,所以你只需要一個(gè)命令就可以運(yùn)行你的Web應(yīng)用。
bashCopy code
java -jar myapp.jar
在上面的命令中,Java的JAR文件加載器會(huì)讀取在
META-INF/MANIFEST.MF
中的指示,并啟動(dòng)嵌入的Tomcat和Spring Boot應(yīng)用。
綜上所述,通過(guò)內(nèi)置Tomcat,Spring Boot簡(jiǎn)化了Web應(yīng)用的開(kāi)發(fā)和部署。開(kāi)發(fā)者不再需要手動(dòng)下載、安裝、配置外部的Servlet容器,也不需要為部署而煩惱。這大大加速了從開(kāi)發(fā)到生產(chǎn)的過(guò)程。