1. 程式人生 > 程式設計 >Spring Boot如何使用Undertow代替Tomcat

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 的優勢是高併發下的吞吐量。你可以根據自己的實際需要來選擇。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。