Undertow 是一個採用 Java 開發的靈活的高性能 Web 服務器,提供包括阻塞和基於 NIO
的非堵塞機制。Undertow 是紅帽公司的開源產品,是 Wildfly 默認的 Web 服務器。Undertow 提供一個基礎的架構用來構建 Web 服務器,這是一個徹底爲嵌入式設計的項目,提供易用的構建器 API,徹底向下兼容 Java EE Servlet 3.1
和低級非堵塞的處理器。web
Spring boot 默認使用 Tomcat 內嵌容器 。依賴於 spring-boot-starter-web
。咱們只須要排除 Tomcat 依賴。引用Undertow 就能夠了,maven
配置以下:spring
<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>
其實到第三步已經能夠愉快地玩耍了。你能夠當即在 https://felord.cn 找到更多教程來學習Spring Boot。固然你也能夠再折騰一番,經過在Spring Boot 配置文件application.yml
中配置 ServerProperties
和 ServerProperties.Undertow
的相關屬性。 總結了一下比較陌生的 ServerProperties.Undertow
的屬性:tomcat
# 設置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
今天咱們演示瞭如何用性能優良的 Undertow 來做爲Spring Boot 的 Servlet Web 容器。其實在併發量不大的狀況下 Undertow
、和其它兩款 Servlet Web 容器 Jetty
、Tomcat
的差距並非很大。 Undertow
的優點是高併發下的吞吐量。你能夠根據本身的實際須要來選擇。服務器
關注公衆號:Felordcn獲取更多資訊
架構