点击上方“后端技术精选”,选择“置顶公众号”

技术文章第一时间送达!

作者:阿迈达

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中我们还可以使用什么容器技术呢?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,你会发现你的系统性能会得到很大的提升。

END

Java面试题专栏

【40期】说一下线程池内部工作原理【39期】Mybatis面试18问,你想知道的都在这里了!【38期】一份tcp、http面试指南,常考点都给你了【37期】请你详细说说类加载流程,类加载机制及自定义类加载器【36期】说说 如何停止一个正在运行的线程?【35期】谈谈你对Java线程之间通信方式的理解【34期】谈谈为什么要拆分数据库?有哪些方法?【33期】分别谈谈联合索引生效和失效的条件【32期】你知道Redis的字符串是怎么实现的吗?【31期】了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?应对措施是什么

欢迎长按下图关注公众号后端技术精选

undertow 怎么创建线程_为什么很多SpringBoot开发者放弃了Tomcat,选择了Undertow相关推荐

  1. 为什么很多 SpringBoot 开发者放弃了 Tomcat,选择了 Undertow?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:阿迈达 toutiao.com/a6775476659416 ...

  2. 为什么很多SpringBoot开发者放弃了Tomcat,选择了Undertow

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:阿迈达 toutiao.com/a6775476659416 ...

  3. 为什么很多SpringBoot开发者放弃了Tomcat,选择了Undertow?

    作者:阿迈达 来源:toutiao.com/a6775476659416990212 前言 在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内 ...

  4. 为什么很多SpringBoot开发者放弃了Tomcat而选择Undertow

    一.前言 在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat.同时,SpringBoot也支持Undertow容器,我们可以 ...

  5. java线程的创建线程_多线程(Thread、线程创建、线程池)

    第1章 多线程 1.1 多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序, ...

  6. java 创建线程_【80期】说出Java创建线程的三种方式及对比

    点击上方"Java面试题精选",关注公众号 面试刷图,查缺补漏 >>号外:往期面试题,10篇为一个单位归置到本公众号菜单栏->面试题,有需要的欢迎翻阅. 一.Ja ...

  7. python 批量创建线程_【Python】批量创建线程

    在<[Python]线程的创建.执行.互斥.同步.销毁>(点击打开链接)中介绍了Python中线程的使用,但是里面线程的创建,使用了很原始的方式,一行代码创建一条.其实,Python里是可 ...

  8. java 线程中创建线程_如何在Java 8中创建线程安全的ConcurrentHashSet?

    java 线程中创建线程 在JDK 8之前,还没有办法在Java中创建大型的线程安全的ConcurrentHashSet. java.util.concurrent包甚至没有一个名为Concurren ...

  9. undertow 怎么创建线程_SpringBoot使用Undertow做服务器

    说明 undertow,jetty和tomcat可以说是javaweb项目当下最火的三款服务器,tomcat是apache下的一款重量级的服务器,不用多说历史悠久,经得起实践的考验.然而:当下微服务兴 ...

最新文章

  1. rgb和yuv的区别
  2. 网关限流了,躲在后面的服务就能高枕无忧啦?
  3. 离职后,我们该如何处理社保!
  4. conda常用命令汇总
  5. think in java i o_《Thinking in Java》学习——18章Java I/O系统(三)
  6. python pip下载安装教程_python详细安装pip教程
  7. 大神微服务笔记全过程博客
  8. 流程管理无效的几个判定标准?
  9. 谈谈我对-大学-游戏-追名逐利-等10个话题的一些简要看法
  10. Windows 8 DirectX 开发学习笔记(十五)使用Billboard实现树木贴图
  11. 计算机网线接口松动怎么办,家里宽带“罢工”怎么办?中国移动教你五步排障法...
  12. C++ 引用的本质是什么?
  13. ArcGIS教程:按掩膜提取 (空间分析)
  14. java判断对象属性为空_Java判断对象属性全为空
  15. 什么是Advanced Color ePaper (ACeP) 多彩墨水屏及其应用
  16. 假如我来架构12306网站
  17. Win7系统卸载McAfee杀毒软件
  18. 【转自知乎】5G关键技术之波束成形
  19. 永久勘误:微软等面试100题系列,答案V0.4版[第41-60题答案]
  20. enumerate在python中是什么意思_python中enumerate的用法实例解析

热门文章

  1. @Deprecated 注解 (@Documented 、@Retention、@Target)
  2. 狗窝里的小日子- 4 ...
  3. Oracle的逆向工程generatorConfig
  4. 十、eclipse快捷键大全
  5. Python基础-time and datetime
  6. opengl微开发之1-从零開始
  7. 脱机下载至校验成功的脚本
  8. 开发一个自己的 CSS 框架(五)
  9. Centos中配置环境变量
  10. python 利用pexpect进行多机远程命令执行