首页
下载应用
提交文章
关于我们
🔥 热搜 🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
首页
下载应用
提交文章
关于我们
🔥
热搜
🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
bxrf的瓜
陈泽心疼阿哲,回应大舞台节奏!哲修辰杭州聚会!宇文泡1600万叫价青蛙哥!
向哲学习!可楼扎心一修:哲哥比你年轻比你搞笑!芮甜甜官宣复播!
失信被执行人的孩子上学受影响吗?最高法明确:受限!
”FAN某”的离婚财产分割判决书(全文)
生成图片,分享到微信朋友圈
查看原文
其他
为什么很多SpringBoot开发者放弃了Tomcat,选择了Undertow?
阿迈达
Java之间
2020-10-16
点击上方“Java之间”,选择“置顶或者星标”
你关注的就是我关心的!
来源:
toutiao.com/a6775476659416990212
前言
在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。
同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使用方面都优于Tomcat,那我们如何使用Undertow技术呢?
本文将为大家细细讲解。
SpringBoot中的Tomcat容器
SpringBoot可以说是目前最火的Java Web框架了。
它将开发者从繁重的xml解救了出来,让开发者在几分钟内就可以创建一个完整的Web服务,极大的提高了开发者的工作效率。
Web容器技术是Web项目必不可少的组成部分,因为任Web项目都要借助容器技术来运行起来。
在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。
SpringBoot设置Undertow
对于Tomcat技术,Java程序员应该都非常熟悉,它是Web应用最常用的容器技术。
我们最早的开发的项目基本都是部署在Tomcat下运行,那除了Tomcat容器,SpringBoot中我们还可以使用什么容器技术呢?
没错,就是题目中的Undertow容器技术。
SrpingBoot已经完全继承了Undertow技术,我们只需要引入Undertow的依赖即可,如下图所示。
配置好以后,我们启动应用程序,发现容器已经替换为Undertow。
那我们为什么需要替换Tomcat为Undertow技术呢?
Tomcat与Undertow的优劣对比
Tomcat是Apache基金下的一个轻量级的Servlet容器,支持Servlet和JSP。
Tomcat具有Web服务器特有的功能,包括 Tomcat管理和控制平台、安全局管理和Tomcat阀等。
Tomcat本身包含了HTTP服务器,因此也可以视作单独的Web服务器。
但是,Tomcat和ApacheHTTP服务器不是一个东西,ApacheHTTP服务器是用C语言实现的HTTP Web服务器。
Tomcat是完全免费的,深受开发者的喜爱。
Undertow是Red Hat公司的开源产品, 它完全采用Java语言开发,是一款灵活的高性能Web服务器,支持阻塞IO和非阻塞IO。
由于Undertow采用Java语言开发,可以直接嵌入到Java项目中使用。
同时, Undertow完全支持Servlet和Web Socket,在高并发情况下表现非常出色。
我们在相同机器配置下压测Tomcat和Undertow,得到的测试结果如下所示:
QPS测试结果对比:
Tomcat
Undertow
内存使用对比:
Tomcat
Undertow
通过测试发现,在高并发系统中,Tomcat相对来说比较弱。
在相同的机器配置下,模拟相等的请求数,Undertow在性能和内存使用方面都是最优的。
并且Undertow新版本默认使用持久连接,这将会进一步提高它的并发吞吐能力。
所以,如果是高并发的业务系统,Undertow是最佳选择。
最后
SpingBoot中我们既可以使用Tomcat作为Http服务,也可以用Undertow来代替。
Undertow在高并发业务场景中,性能优于Tomcat。
所以,如果我们的系统是高并发请求,不妨使用一下Undertow,你会发现你的系统性能会得到很大的提升。
最近热文阅读:
1、
面试官:为什么 wait() 方法需要写在while里,而不是if?
2、
太赞了,Intellij IDEA 竟然把 Java8 的数据流问题这么完美的解决掉了!
3、
再见,Lombok,没想到你才是让我们代码处于了“亚健康”状态的真正元凶!
4、
SQL 查询总是先执行SELECT语句吗?你们都错了!
5、
干掉 Swagger,试试这个!
6
、
执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?
7、
Kafka如何通过经典的内存缓冲池设计来优化JVM GC问题?
8、
求求你们了,别再写满屏的try catch了...
9、
高并发:RocketMQ 削峰实战!
10、
面试难题:List 如何一边遍历,一边删除?
关注公众号,你想要的Java都在这里
喜欢此内容的人还喜欢
您可能也对以下帖子感兴趣
{{{title}}}
文章有问题?点此查看未经处理的缓存