公司为什么禁止SpringBoot项目使用Tomcat?

news2024/11/17 7:48:56

前言

在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在性能和内存使用方面都是最优的。并且Undertow新版本默认使用持久连接,这将会进一步提高它的并发吞吐能力。所以,如果是高并发的业务系统,Undertow是最佳选择。

最后

SpingBoot中我们既可以使用Tomcat作为Http服务,也可以用Undertow来代替。Undertow在高并发业务场景中,性能优于Tomcat。所以,如果我们的系统是高并发请求,不妨使用一下Undertow,你会发现你的系统性能会得到很大的提升。

扩展

不光如此,现在市面上还有很多web端的服务器,比如nginx、Weblogic、WebSphere等等。。。。大家可自行了解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/452090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mac 安装Charles抓包工具及使用教程(什么,都什么时候了还不会抓包)

Mac 安装Charles抓包工具及使用教程 一、抓包工具对比二、安装Charles三、网页抓包 一、抓包工具对比 这五个工具都是比较常用的抓包工具,具体哪个更适合你需要根据你的具体需求和使用习惯来决定。以下是它们各自的优缺点: Charles:功能强大…

[LeetCode周赛复盘] 第 342 场周赛20230423

[LeetCode周赛复盘] 第 342 场周赛20230423 一、本周周赛总结二、 6387. 计算列车到站时间1. 题目描述2. 思路分析3. 代码实现 三、6391. 倍数求和1. 题目描述2. 思路分析3. 代码实现 四、6390. 滑动子数组的美丽值1. 题目描述2. 思路分析3. 代码实现 五、 6392. 使数组所有元…

Grid (基础DP)

题目&#xff1a; 给一个 HW 的网格&#xff0c;网格由‘.’和‘#’组成&#xff0c;一开始在左上角 (1,1)(1,1) 每一步只能向右或向下走&#xff0c;不能经过 # 格子&#xff0c;求走到右下角 (H,W) 有多少种走法。 其中 2<H,W<1000&#xff1b; 答案对 10^97 取模。…

ZBlog安装SSL证书

Z-BlogPHP简介 Z-BlogPHP是一款强大的博客式建站系统和CMS程序Z-BlogPHP支持PHP 5.2 - 7.4、8.0 - 8.1,可运行在市面上所有的操作系统和WEB服务器之上。 大部分部署ZBlogPHP程序使用Linux比较普遍&#xff0c;这是介绍使用宝塔控制面板安装SSL证书方法&#xff1a; 1、进入Gw…

JDBC操作数据库

数据库介绍 数据库是一种存储结构&#xff0c;允许使用各种格式输入、处理和检索数据&#xff0c;不必再每次需要数据时重新输入。当前比较流行的数据库主要有MySQL、Oracle、SQL Server等 使用JDBC操作数据库&#xff0c;SQL语句是比不可少的&#xff0c;SQL是一种结构化查询…

安装配置 ZLMediaKit

一、ZLMediaKit 库简介 ZLMediaKit 是一个基于 C11 的高性能运营级流媒体服务框架 官方写的项目特点&#xff1a; 基于 C11 开发&#xff0c;避免使用裸指针&#xff0c;代码稳定可靠&#xff0c;性能优越。 支持多种协议(RTSP/RTMP/HLS/HTTP-FLV/Websocket-FLV/GB28181/MP4…

【数据分析之道-Pandas(一)】Series操作

文章目录 专栏导读1、Series简介2、创建Series3、Series索引4、Series切片 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Python领域新星创作者&#xff0c;专注于分享python领域知识。 ✍ 本文录入于《数据分析之道》&#xff0c;本专栏针对大学生、初级数据分析工…

光线追踪 1(基本概念Whitted-Style Ray Tracing)

为什么要光线追踪 光栅化存在什么问题 无法实现软阴影&#xff08;光源不是严格点光源时&#xff09; 无法解决光线反射超过一次的情况 相对来说光照效果的质量低 光线追踪的特点 准确慢&#xff08;相对光栅化&#xff09; 什么是光线追踪 光线的基本假设 光线沿直…

王道计组(23版)5_中央处理器

CPU 功能 指令控制&#xff1a;取指、分析、执行 操作控制&#xff1a;一条指令的功能由若干操作信号组合实现 时间控制、数据加工、中断处理 基本结构 运算器 ALU&#xff1a;算术/逻辑运算 暂存寄存器&#xff1a;暂存从主存读来的数据&#xff0c;透明 ACC&#xff1a;…

【变量的解构赋值】

变量的解构赋值 1 数组的解构2 对象的解构 ES6允许按照一定模式从数组和对象中提取值&#xff0c;对变量进行赋值&#xff0c;这称为解构赋值。 1 数组的解构 <script>// 1.数组的解构const F4 [小沈阳,刘能,赵四,宋小宝];let [xiao,liu,zhao,song] F4;console.log(xi…

算法基础(三):链表知识点及题型讲解

算法基础&#xff08;三&#xff09;&#xff1a;链表知识点及题型讲解 1 链表定义2 Python链表常用操作2.1 创建链表2.2 添加元素2.3 访问元素2.4 搜索元素2.5 更新元素2.6 删除元素2.7 获取链表长度 3 力扣题目训练 一些算法基础知识点和leetcode题解&#xff0c;语言是pytho…

体验 buildah

体验 buildah 什么是 Buildah安装 BuildahBuildah 使用 Dockerfiles参考资料 什么是 Buildah Buildah 是一个便于构建开放容器倡议&#xff08;OCI&#xff09;容器镜像的工具。 Buildah软件包提供了一个命令行工具&#xff0c;可以用来&#xff1a; 创建一个工作容器&#x…

代码随想录算法训练营第三十九天|62.不同路径、63. 不同路径 II

文章目录 62.不同路径63. 不同路径 II 62.不同路径 题目链接&#xff1a;代码随想录 解题思路&#xff1a; 1.dp(i)(j)&#xff1a;表示从&#xff08;0 &#xff0c;0&#xff09;出发&#xff0c;到(i, j) 有dp(i)(j)条不同的路径 2.确定dp的表达式: dp(i)(j) dp(i-1)(j) …

OpenCV核心运算(二)—图像基本与算术操作

目录 2.1 图像的基本操作目标访问和修改像素值访问图像属性图像ROI分割和合并图像通道为图像制作边框&#xff08;填充&#xff09; 2.2 图像上的算术操作目标图像加法图像混合位操作练习 2.3 性能测量和改进技术目标用OpenCV测量性能OpenCV中的默认优化更多的IPython魔法命令性…

[HBZ分享] 小米手机如何解BL锁

第一步&#xff1a; 进入【设置—>我的设备–>全部参数–>连续疯狂的点MIUI版本那一行】 第二步&#xff1a;进入【更多设置–>开发者模式】&#xff0c;打开USB调试 与 USB安装 第三步&#xff1a;进入【更多设置–>开发者模式】&#xff0c;进入【设别解锁状…

spring eurake中使用IP注册

在开发spring cloud的时候遇到一个很奇葩的问题&#xff0c;就是服务向spring eureka中注册实例的时候使用的是机器名&#xff0c;然后出现localhost、xxx.xx等这样的内容&#xff0c;如下图&#xff1a; eureka.instance.perferIpAddresstrue 我不知道这朋友用的什么spring c…

单片机设计_自动追光系统、光源跟踪系统(AT89C51 光敏电阻 步进电机)

想要更多项目私wo!!! 一、电路设计 51 单片机双轴自动追光系统主要由 STC89C52RC 5516 光敏电阻 ADC0832 ULN2803 步进电机 LCD1602 显示屏组成。 1.通过子电路板的上、下、左、右四个光敏电阻来感受四个方向的光强&#xff0c;自 动寻找光强最强的方向。四个光敏电阻的…

MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别

文章目录 MySQL存储引擎InnoDB、MyISAM和MEMORY介绍详解和区别InnoDB存储引擎特点操作示例创建InnoDB表修改表引擎为InnoDB MyISAM存储引擎特点操作示例创建MyISAM表修改表引擎为MyISAM MEMORY存储引擎特点操作示例创建MEMORY表修改表引擎为MEMORY 总结 MySQL存储引擎InnoDB、M…

代码随想录算法训练营第六天|242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

先了解一下什么是哈希表 哈希表是根据关键码的值而直接进行访问的数据结构 所以数组就是哈希表 盗个卡哥的图 哈希表中关键码就是数组的索引下标&#xff0c;然后通过下标直接访问数组中的元素&#xff0c;如下图所示&#xff1a; 哈希表能解决的问题&#xff1a; 一般哈…

【LeetCode】987.二叉树的垂序遍历

二叉树遍历系列 144.二叉树的前序遍历94.二叉树的中序遍历145.二叉树的后续遍历102.二叉树的层序遍历107.二叉树的层序遍历II103.二叉树的锯齿形层序遍历&#xff08;之字形遍历&#xff09;199.二叉树的右视图 二叉树的垂序遍历目录 二叉树遍历系列1.问题示例 1示例 2示例 3 …