Spring Boot如何使用Undertow代替Tomcat
1. Undertow 簡介
Undertow 是一個采用 Java 開發(fā)的靈活的高性能 Web 服務(wù)器,提供包括阻塞和基于 NIO 的非堵塞機制。Undertow 是紅帽公司的開源產(chǎn)品,是 Wildfly 默認(rèn)的 Web 服務(wù)器。Undertow 提供一個基礎(chǔ)的架構(gòu)用來構(gòu)建 Web 服務(wù)器,這是一個完全為嵌入式設(shè)計的項目,提供易用的構(gòu)建器 API,完全向下兼容 Java EE Servlet 3.1 和低級非堵塞的處理器。
2. Undertow特點
高性能 在多款同類產(chǎn)品的壓測中,在高并發(fā)情況下表現(xiàn)出色。 Servlet4.0 支持 它提供了對 Servlet4.0 的支持。 Web Socket 完全支持,包括JSR-356,用以滿足 Web 應(yīng)用巨大數(shù)量的客戶端。 內(nèi)嵌式 它不需要容器,只需通過 API 即可快速搭建 Web 服務(wù)器。 靈活性 交由鏈?zhǔn)紿andler配置和處理請求,可以最小化按需加載模塊,無須加載多余功能。 輕量級 它是一個 內(nèi)嵌Web 服務(wù)器, 由兩個核心 Jar 包組成3. 替換默認(rèn)的Tomcat
Spring boot 默認(rèn)使用 Tomcat 內(nèi)嵌容器 。依賴于 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
其實到第三步已經(jīng)可以愉快地玩耍了。你可以立即在 https://felord.cn 找到更多教程來學(xué)習(xí)Spring Boot。當(dāng)然你也可以再折騰一番,通過在Spring Boot 配置文件application.yml中配置 ServerProperties 和ServerProperties.Undertow 的相關(guān)屬性。 總結(jié)了一下比較陌生的ServerProperties.Undertow 的屬性:
# 設(shè)置IO線程數(shù), 它主要執(zhí)行非阻塞的任務(wù),它們會負(fù)責(zé)多個連接, 默認(rèn)設(shè)置每個CPU核心一個線程# 不要設(shè)置過大,如果過大,啟動項目會報錯:打開文件數(shù)過多server: undertow: io-threads: 16# 阻塞任務(wù)線程池, 當(dāng)執(zhí)行類似servlet請求阻塞IO操作, undertow會從這個線程池中取得線程# 它的值設(shè)置取決于系統(tǒng)線程執(zhí)行任務(wù)的阻塞系數(shù),默認(rèn)值是IO線程數(shù)*8 worker-threads: 256# 以下的配置會影響buffer,這些buffer會用于服務(wù)器連接的IO操作,有點類似netty的池化內(nèi)存管理# 每塊buffer的空間大小,越小的空間被利用越充分,不要設(shè)置太大,以免影響其他應(yīng)用,合適即可 buffer-size: 1024# 每個區(qū)分配的buffer數(shù)量 , 所以pool的大小是buffer-size * buffers-per-region buffers-per-region: 1024# 是否分配的直接內(nèi)存(NIO直接分配的堆外內(nèi)存) direct-buffers: true
5. 總結(jié)
今天我們演示了如何用性能優(yōu)良的 Undertow 來作為Spring Boot 的 Servlet Web 容器。其實在并發(fā)量不大的情況下 Undertow、和其它兩款 Servlet Web 容器 Jetty 、Tomcat 的差距并不是很大。 Undertow 的優(yōu)勢是高并發(fā)下的吞吐量。你可以根據(jù)自己的實際需要來選擇。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:

網(wǎng)公網(wǎng)安備