spring-boot定製和最佳化內嵌的Tomcat
springboot為我們內嵌了三種容器供我們使用:Tomcat、Jetty和undertow,預設使用tomcat
springboot內嵌的三種容器
本文介紹兩種方式來定製springboot內嵌的Tomcat
第一種方式
@SpringBootConfigurationpublic class WebServerConfiguration { @Bean public EmbeddedServletContainerFactory embeddedServletContainerFactory() { TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); //設定埠號 factory.setPort(8888); //factory這個物件中還有很多的Spring容器級別的引數可以設定,例如我們前幾篇文章中講到的Initializers、Listeners、Tomcat日誌等 //設定Tomcat連線池... //這是以java8的做法來實現的,事實上就是編寫一個內部類,不熟悉Java8的讀者可以借鑑下面的實現方式 factory.addConnectorCustomizers((connector -> { Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); protocol.setMaxThreads(200); protocol.setMaxConnections(1000); //protocol這個物件中還有很多tomcat的引數可以設定,讀者可以自己瞭解瞭解。 })); /*factory.addConnectorCustomizers(new TomcatConnectorCustomizer() { @Override public void customize(Connector connector) { Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler(); protocol.setMaxThreads(200); protocol.setMaxConnections(1000); } });*/ return factory; } }
第二種方式
編寫類,實現EmbeddedServletContainerCustomizer
介面,重寫抽象方法,並將這個類加入spring容器中管理。
@Componentpublic class MyEmbeddedServletContainerCustomizer implements EmbeddedServletContainerCustomizer { @Override public void customize(ConfigurableEmbeddedServletContainer container) { //和第一種方法一樣,我們又拿到了這個factory物件,我們就可以接著搞事情了.... TomcatEmbeddedServletContainerFactory factory = (TomcatEmbeddedServletContainerFactory) container; //...... } }
其實,第一種方式來自於springboot原始碼的實現,我們可以開啟EmbeddedServletContainerAutoConfiguration
這個類閱讀一下原始碼。
EmbeddedServletContainerAutoConfiguration.class
springboot原始碼的實現方式和我們的第一種實現方式一模一樣,只不過原始碼作者僅僅是new TomcatEmbeddedServletContainerFactory()
而已,並沒有新增任何的配置引數。紅框的部分我們在這一小節講過,當spring容器中沒有TomcatEmbeddedServletContainerFactory這個bean時,才會把此bean載入進Spring容器中。顯然我們自己編寫了一個Tomcat的Configuration後,圖中的bean將不會被載入。由於篇幅有限,截圖的這個類的下面還有jetty、Undertow的程式碼,和Tomcat的實現是一樣的,這裡就不介紹了,讀者感興趣可以自己一探究竟。
另外,再介紹一下如何將springboot預設使用的tomcat容器換成jetty或其他容器,只需在pom.xml中排除掉spring-boot-starter-tomcat的引用,加上spring-boot-starter-jetty的引用就好了。
好啦,本節內容就到這裡,感興趣的讀者可以持續關注我的springboot系列部落格~
作者:八目朱勇銘
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1978/viewspace-2820410/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android定製ROM,內嵌su和xposedAndroid
- Netweaver的埠號和Spring boot內嵌的Tomcat埠Spring BootTomcat
- 學習Tomcat(七)之Spring內嵌TomcatTomcatSpring
- Spring Boot 內嵌容器 Tomcat / UndertowSpring BootTomcat
- SpringBoot原始碼解析-內嵌Tomcat容器的啟動Spring Boot原始碼Tomcat
- [Web Server]Tomcat調優之SpringBoot內嵌Tomcat原始碼分析WebServerTomcatSpring Boot原始碼
- 【Spring】內嵌Tomcat&去Xml&除錯MvcSpringTomcatXML除錯MVC
- 精盡Spring Boot原始碼分析 - 內嵌Tomcat容器的實現Spring Boot原始碼Tomcat
- Spring Boot移除內嵌Tomcat,使用非web方式啟動Spring BootTomcatWeb
- 禁用內嵌檢視的排序排序
- 課時20:內嵌函式和閉包函式
- MongoDB查詢(陣列、內嵌文件和$where)MongoDB陣列
- Nginx 內嵌變數Nginx變數
- Django的訊息中內嵌HTMLDjangoHTML
- Tomcat的最佳化Tomcat
- MongoDB查詢內嵌文件MongoDB
- 小程式的一些總結:畫canvas和內嵌webviewCanvasWebView
- 把spring-boot專案部署到tomcat中的方法SpringbootTomcat
- 淺談小程式內嵌網頁及內嵌網頁跳轉分享實現網頁
- 使用iframe內嵌網頁的時候,如何做到內嵌網頁的高度自適應 有大用網頁
- 小程式內嵌h5H5
- spring-boot專案的建立以及部署到外部tomcat的方法SpringbootTomcat
- Mongodb內嵌陣列的完全匹配查詢MongoDB陣列
- SVG 立方體內嵌路徑拼接SVG
- 客戶端內嵌Vue頁面客戶端Vue
- C++內嵌彙編 教程1C++
- Javassist之內省與定製(四)Java
- SpringBoot原始碼學習4——SpringBoot內嵌Tomcat啟動流程原始碼分析Spring Boot原始碼Tomcat
- 淺談國內外對智慧製造體系的定義和標準
- spring-boot專案在外部tomcat環境下部署SpringbootTomcat
- ios和android內嵌h5頁面聯調小結iOSAndroidH5
- Android/iOS內嵌Unity開發示例AndroidiOSUnity
- Go 內嵌靜態檔案工具 packrGo
- Oracle與MySQL內嵌遊標的使用示例OracleMySql
- javafx內嵌為Swing程式淺析Java
- 可以把 FolkMQ 內嵌到 SpringBoot3 專案裡(可內嵌的訊息中介軟體,純血國產)MQSpring Boot
- PGA的實際管理,設定和最佳化
- Chrome54終結YouTube的Flash內嵌技術Chrome