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

- 底層會自動配置好 ,自動配置類 ServletWebServerFactoryAutoConfiguration
- ServletWebServerFactoryAutoConfiguration 導入 ServletWebServerFactoryConfiguration 工廠配置類
ServletWebServerFactoryConfiguration.class

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

@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);
}
總結: 所謂內嵌服務器,就是把我們手動啟動服務器的方法放進框架中了。
應用
1. 切換Web服務器
排除 tomcat 服務器,導入 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. 定制服務器規(guī)則
方法一: 修改 server 下的配置文件
ServerProperties.class

server.undertow.accesslog.dir=/tmp
方法二: 自定義 ConfigurableServletWebServerFactory
方法三: 自定義 ServletWebServerFactoryCustomizer 定制化器
作用: 將配置文件的值,與 ServletWebServerFactory 綁定
SpringBoot 設計: Customizer 定制化器,可以定制 XXX 規(guī)則
到此這篇關于SpringBoot嵌入式Web容器原理與使用介紹的文章就介紹到這了,更多相關SpringBoot嵌入式Web容器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決@Transactional注解事務不回滾不起作用的問題
這篇文章主要介紹了解決@Transactional注解事務不回滾不起作用的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-02-02
Java中一個線程執(zhí)行死循環(huán)有什么后果
這篇文章主要為大家詳細介紹了Java中一個線程執(zhí)行死循環(huán)有什么后果,當一個線程在執(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ù)庫代碼和步驟詳解及實例代碼的相關資料,需要的朋友可以參考下2017-02-02

