SpringBoot嵌入式Web容器原理與使用介紹
嵌入式 Web 容器:應(yīng)用中內(nèi)置服務(wù)器(Tomcat),不用在外部配置服務(wù)器了
原理
- SpringBoot 項目啟動,發(fā)現(xiàn)是 web 應(yīng)用,引入 web 場景包 ----- 如:Tomcat
- web 應(yīng)用創(chuàng)建一個 web 版的 IOC 容器 ServletWebServerApplicationContext
- ServletWebServerApplicationContext 啟動的時候?qū)ふ?ServletWebServerFactory (Servlet 的 web 服務(wù)器工廠,用于生產(chǎn) Servlet 服務(wù)器)
- ServletWebServerFactory 底層默認有很多 Web 服務(wù)器工廠

- 底層會自動配置好 ,自動配置類 ServletWebServerFactoryAutoConfiguration
- ServletWebServerFactoryAutoConfiguration 導(dǎo)入 ServletWebServerFactoryConfiguration 工廠配置類
ServletWebServerFactoryConfiguration.class

- 動態(tài)判斷系統(tǒng)中導(dǎo)入了那個web服務(wù)器配置包
- 如果導(dǎo)入 Tomcat 依賴,會自動放一個 Tomcat 服務(wù)器工廠, TomcatServletWebServerFactory 為我們創(chuàng)建出 Tomcat 服務(wù)器工廠
- Tomcat 底層支持如下服務(wù)器

@Override
public WebServer getWebServer(ServletContextInitializer... initializers) {
if (this.disableMBeanRegistry) {
Registry.disableRegistry();
}
Tomcat tomcat = new Tomcat();
File baseDir = (this.baseDirectory != null) ? this.baseDirectory : createTempDir("tomcat");
tomcat.setBaseDir(baseDir.getAbsolutePath());
Connector connector = new Connector(this.protocol);
connector.setThrowOnFailure(true);
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);
}
總結(jié): 所謂內(nèi)嵌服務(wù)器,就是把我們手動啟動服務(wù)器的方法放進框架中了。
應(yīng)用
1. 切換Web服務(wù)器
排除 tomcat 服務(wù)器,導(dǎo)入 undertow 依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
2. 定制服務(wù)器規(guī)則
方法一: 修改 server 下的配置文件
ServerProperties.class

server.undertow.accesslog.dir=/tmp
方法二: 自定義 ConfigurableServletWebServerFactory
方法三: 自定義 ServletWebServerFactoryCustomizer 定制化器
作用: 將配置文件的值,與 ServletWebServerFactory 綁定
SpringBoot 設(shè)計: Customizer 定制化器,可以定制 XXX 規(guī)則
到此這篇關(guān)于SpringBoot嵌入式Web容器原理與使用介紹的文章就介紹到這了,更多相關(guān)SpringBoot嵌入式Web容器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決@Transactional注解事務(wù)不回滾不起作用的問題
這篇文章主要介紹了解決@Transactional注解事務(wù)不回滾不起作用的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Java中一個線程執(zhí)行死循環(huán)有什么后果
這篇文章主要為大家詳細介紹了Java中一個線程執(zhí)行死循環(huán)有什么后果,當(dāng)一個線程在執(zhí)行死循環(huán)時會影響另外一個線程嗎,下面為大家揭曉2016-05-05
Spring+Mybatis動態(tài)切換數(shù)據(jù)源的方法
這篇文章主要為大家詳細介紹了Spring+Mybatis動態(tài)切換數(shù)據(jù)源的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-01-01
java 中JDBC連接數(shù)據(jù)庫代碼和步驟詳解及實例代碼
這篇文章主要介紹了java 中JDBC連接數(shù)據(jù)庫代碼和步驟詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02

