一、什么是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.bootgroupId>
- <artifactId>spring-boot-starter-webartifactId>
-
- <exclusions>
- <exclusion>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-tomcatartifactId>
- exclusion>
- exclusions>
-
- dependency>
-
- <dependency>
- <groupId>org.springframework.bootgroupId>
- <artifactId>spring-boot-starter-undertowartifactId>
- 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