Spring Boot如何使用Undertow代替Tomcat
1. Undertow 簡介
Undertow 是一個採用 Java 開發的靈活的高效能 Web 伺服器,提供包括阻塞和基於 NIO 的非堵塞機制。Undertow 是紅帽公司的開源產品,是 Wildfly 預設的 Web 伺服器。Undertow 提供一個基礎的架構用來構建 Web 伺服器,這是一個完全為嵌入式設計的專案,提供易用的構建器 API,完全向下相容 Java EE Servlet 3.1 和低階非堵塞的處理器。
2. Undertow特點
- 高效能 在多款同類產品的壓測中,在高併發情況下表現出色。
- Servlet4.0 支援 它提供了對 Servlet4.0 的支援。
- Web Socket 完全支援,包括JSR-356,用以滿足 Web 應用巨大數量的客戶端。
- 內嵌式 它不需要容器,只需通過 API 即可快速搭建 Web 伺服器。
- 靈活性 交由鏈式Handler配置和處理請求,可以最小化按需載入模組,無須載入多餘功能。
- 輕量級 它是一個 內嵌Web 伺服器, 由兩個核心 Jar 包組成
3. 替換預設的Tomcat
Spring boot 預設使用 Tomcat 內嵌容器 。依賴於 spring-boot-starter-web 。我們只需要排除 Tomcat 依賴。引用Undertow 就可以了,maven 配置如下:
<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>
4. 自定義配置Undertow
其實到第三步已經可以愉快地玩耍了。你可以立即在 https://felord.cn 找到更多教程來學習Spring Boot。當然你也可以再折騰一番,通過在Spring Boot 配置檔案application.yml中配置 ServerProperties 和ServerProperties.Undertow 的相關屬性。 總結了一下比較陌生的ServerProperties.Undertow 的屬性:
# 設定IO執行緒數,它主要執行非阻塞的任務,它們會負責多個連線,預設設定每個CPU核心一個執行緒 # 不要設定過大,如果過大,啟動專案會報錯:開啟檔案數過多 server: undertow: io-threads: 16 # 阻塞任務執行緒池,當執行類似servlet請求阻塞IO操作,undertow會從這個執行緒池中取得執行緒 # 它的值設定取決於系統執行緒執行任務的阻塞係數,預設值是IO執行緒數*8 worker-threads: 256 # 以下的配置會影響buffer,這些buffer會用於伺服器連線的IO操作,有點類似netty的池化記憶體管理 # 每塊buffer的空間大小,越小的空間被利用越充分,不要設定太大,以免影響其他應用,合適即可 buffer-size: 1024 # 每個區分配的buffer數量,所以pool的大小是buffer-size * buffers-per-region buffers-per-region: 1024 # 是否分配的直接記憶體(NIO直接分配的堆外記憶體) direct-buffers: true
5. 總結
今天我們演示瞭如何用效能優良的 Undertow 來作為Spring Boot 的 Servlet Web 容器。其實在併發量不大的情況下 Undertow、和其它兩款 Servlet Web 容器 Jetty 、Tomcat 的差距並不是很大。 Undertow 的優勢是高併發下的吞吐量。你可以根據自己的實際需要來選擇。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。