Spring Boot - Undertow容器啓動

Spring Boot :Undertow

 

Undertow

  • Undertow 是紅帽公司開發的一款基於 NIO 的高性能 Web 嵌入式服務器
  • Untertow 的特色:
    • 輕量級:它是一個 Web 服務器,但不像傳統的 Web 服務器有容器概念,它由兩個核心 Jar 包組成,加載一個 Web 應用能夠小於 10MB 內存
    • Servlet3.1 支持:它提供了對 Servlet3.1 的支持
    • WebSocket 支持:對 Web Socket 徹底支持,用以知足 Web 應用巨大數量的客戶端
    • 嵌套性:它不須要容器,只需經過 API 便可快速搭建 Web 服務器
  • 默認狀況下 Spring Cloud 使用 Tomcat 做爲內嵌 Servlet 容器,可啓動一個 Tomcat 的 Spring Boot 程序與一個 Undertow 的 Spring Boot 程序,經過 VisualVM 工具進行比較,可看到 Undertow 性能優於 Tomcat

使用 Undertow

添加依賴web

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

支持 HTTP2spring

// 在@Configuration的類中添加@bean
@Bean
UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() {
    
    UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory();
    
    // 這裏也能夠作其餘配置
    factory.addBuilderCustomizers(builder -> builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true));
    
    return factory;
}

配置 Undertowtomcat

# Undertow 日誌存放目錄
server.undertow.accesslog.dir
# 是否啓動日誌
server.undertow.accesslog.enabled=false 
# 日誌格式
server.undertow.accesslog.pattern=common
# 日誌文件名前綴
server.undertow.accesslog.prefix=access_log
# 日誌文件名後綴
server.undertow.accesslog.suffix=log
# HTTP POST請求最大的大小
server.undertow.max-http-post-size=0 
# 設置IO線程數, 它主要執行非阻塞的任務,它們會負責多個鏈接, 默認設置每一個CPU核心一個線程
server.undertow.io-threads=4
# 阻塞任務線程池, 當執行相似servlet請求阻塞操做, undertow會從這個線程池中取得線程,它的值設置取決於系統的負載
server.undertow.worker-threads=20
# 如下的配置會影響buffer,這些buffer會用於服務器鏈接的IO操做,有點相似netty的池化內存管理
# 每塊buffer的空間大小,越小的空間被利用越充分
server.undertow.buffer-size=1024
# 每一個區分配的buffer數量 , 因此pool的大小是buffer-size * buffers-per-region
server.undertow.buffers-per-region=1024
# 是否分配的直接內存
server.undertow.direct-buffers=true
相關文章
相關標籤/搜索