SpringBoot使用Undertow做服務器

Undertow是一款Java編寫的輕量級高性能的Web服務器,可提供基於NIO的阻塞和非阻塞API。

Undertow設計為完全可嵌入的,並具有易於使用的流暢的Builder API。 Undertow的生命週期完全由嵌入應用程序控制。

Undertow的特性:

  • 支持HTTP / 2
  • 支持HTTP升級,允許多個協議通過HTTP端口進行多路複用
  • 提供對Web Socket的全面支持,包括JSR-356支持。
  • Servlet 4.0
  • 可以嵌入在應用程序中或獨立運行
  • 通過將處理程序鏈接在一起來配置Undertow服務器。它可以對各種功能進行配置,方便靈活。

Spring Boot項目中的引入方式

Spring Boot 可以內嵌 Jetty , Tomcat , Undertow , 默認是Tomcat

要使用 Undertow 只需要在pom配置文件中移除 Tomcat,添加 Undertow 的依賴:

<code>
<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>/<code>

在yml文件中添加Undertow的配置:

<code>server:
# 服務器的HTTP端口,默認為80
port: 8080
http2:
enabled: true
servlet:
# 應用的訪問路徑
context-path: /
# 下面是配置undertow作為服務器的參數
undertow:
# 設置IO線程數, 它主要執行非阻塞的任務,它們會負責多個連接, 默認設置每個CPU核心一個線程
io-threads: 4
# 阻塞任務線程池, 當執行類似servlet請求阻塞操作, undertow會從這個線程池中取得線程,它的值設置取決於系統的負載
# 它的值設置取決於系統線程執行任務的阻塞係數,默認值是IO線程數*8
worker-threads: 80
# 以下的配置會影響buffer,這些buffer會用於服務器連接的IO操作,有點類似netty的池化內存管理
# 每塊buffer的空間大小,越小的空間被利用越充分

buffer-size: 1024
# 是否分配的直接內存
direct-buffers: true/<code>

這樣,配置完成了。

在併發量不高的情況下 , Tomcat與undertow的差別不大 , 如果是高併發的業務系統,Undertow是會使一個更好的選擇。


SpringBoot使用Undertow做服務器


分享到:


相關文章: