Spring Boot如何使用Undertow代替Tomcat
1.Undertow简介
Undertow是一个采用Java开发的灵活的高性能Web服务器,提供包括阻塞和基于NIO的非堵塞机制。Undertow是红帽公司的开源产品,是Wildfly默认的Web服务器。Undertow提供一个基础的架构用来构建Web服务器,这是一个完全为嵌入式设计的项目,提供易用的构建器API,完全向下兼容JavaEEServlet3.1和低级非堵塞的处理器。
2.Undertow特点
- 高性能在多款同类产品的压测中,在高并发情况下表现出色。
- Servlet4.0支持它提供了对Servlet4.0的支持。
- WebSocket完全支持,包括JSR-356,用以满足Web应用巨大数量的客户端。
- 内嵌式它不需要容器,只需通过API即可快速搭建Web服务器。
- 灵活性交由链式Handler配置和处理请求,可以最小化按需加载模块,无须加载多余功能。
- 轻量级它是一个内嵌Web服务器,由两个核心Jar包组成
3.替换默认的Tomcat
Springboot默认使用Tomcat内嵌容器。依赖于spring-boot-starter-web。我们只需要排除Tomcat依赖。引用Undertow就可以了,maven配置如下:
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-undertow
4.自定义配置Undertow
其实到第三步已经可以愉快地玩耍了。你可以立即在https://felord.cn找到更多教程来学习SpringBoot。当然你也可以再折腾一番,通过在SpringBoot配置文件application.yml中配置ServerProperties和ServerProperties.Undertow的相关属性。总结了一下比较陌生的ServerProperties.Undertow的属性:
#设置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
5.总结
今天我们演示了如何用性能优良的Undertow来作为SpringBoot的ServletWeb容器。其实在并发量不大的情况下Undertow、和其它两款ServletWeb容器Jetty、Tomcat的差距并不是很大。Undertow的优势是高并发下的吞吐量。你可以根据自己的实际需要来选择。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。