一、什么是undertow

1、undertow是springboot默认支持的三种servlet容器之一。
tomcat、jetty、undertow

2、undertow怎么读
under-tow

3、undertow是RedHat(红帽公司)的开源产品,采用java开发,是一款灵活、高性能的web服务器,提供了基于NIO的阻塞/非阻塞式APIs,也是WildFly(原名JBoss AS - JBoss Application Server)的默认web容器。

4、官方网站
https://undertow.io/index.html

5、结构图

分为:core组件、servlet组件、websocket组件,底层使用了XNIO。

6、undertow目前有两个主要版本
2.1:当前支持servlet 4.0,JDK8+的稳定版本
1.4:当前支持servlet 3.1,JDK7的稳定版本

二、undertow引入

1、pom文件配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <!-- 排除tomcat依赖 -->
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>

</dependency>

<!-- undertow -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

2、application.yml文件配置

server:
  port: 8442
  
  undertow:
    #HTTP POST请求最大的大小(0不限制)
    max-http-post-size: 0
    #设置IO线程数,它主要执行非阻塞的任务,它们会负责多个连接,默认设置每个CPU核心一个线程
    #不设置会自动调整
    io-threads: 4
    #阻塞任务线程池,当执行类似servlet请求阻塞操作,undertow会从这个线程池中取得线程,它的值设置取决于系统的负载
    #不设置会自动调整
    worker-threads: 20
    ##以下配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理
    #每块buffer的空间大小,越小的空间被利用越充分
    buffer-size: 1024
    #是否分配的直接内存
    direct-buffers: true
    #undertow容器日志
    accesslog:
      #日志存放路径
      dir: D://
      #是否启动日志
      enabled: true
      #日志格式
      pattern: common
      #日志文件名前缀
      prefix: access_log
      #日志文件名后缀
      suffix: log

三、undertow有什么优势

1、undertow平均响应时间比tomcat更快

2、undertow可以分组件按需引入

四、springboot2里的不同

io-threads和worker-threads配置已经过时了,更换成最新的写法

server:
  port: 8002
  
  undertow:
    buffer-size: 1024
    direct-buffers: true
    threads:
      io: 8
      worker: 256

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐