当前位置:首页 > 每日看点 > 正文内容

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

卡卷网11个月前 (01-17)每日看点165

谢邀!

说到底,Spring Boot和Tomcat这对CP被拆散的根本原因,是Tomcat的设计在某些高并发场景下已经显得力不从心,尤其是在需要高效、稳定的长连接环境中。

从源码来看,Spring Boot内嵌Tomcat实现的核心是`spring-boot-starter-tomcat`包。启动时,Spring Boot会初始化`TomcatServletWebServerFactory`,创建内嵌的Tomcat容器,方便开发却也限制了并发性能。Tomcat底层虽然支持NIO(非阻塞I/O)和APR(原生API),但这些都是“补丁”优化,无法解决根本的并发瓶颈问题。

比如说,Tomcat创建连接的关键代码:

// Tomcat Connector初始化部分 public void initInternal() throws LifecycleException { ... this.endpoint = new NioEndpoint(); // 默认使用NIO模式 ... this.protocolHandler = new Http11NioProtocol(endpoint); ... }

Tomcat默认启用NIO模式来处理请求,但在高并发场景下,这种基于线程池的处理方式仍然存在瓶颈。特别是当请求数量超出线程池容量时,就会出现请求阻塞,甚至出现`RejectedExecutionException`异常。也就是说,Tomcat的同步锁和线程管理方式并不适合高并发的场景。

为了解决这一问题,有些公司会直接用Netty替代Tomcat。Netty的Reactor模型特别适合处理大并发,因为它基于异步非阻塞I/O,允许高效管理大量连接,并能灵活配置事件循环,避免线程资源的竞争。

假设我们用Netty替代Spring Boot中的Tomcat,代码如下:

import org.springframework.boot.web.embedded.netty.NettyReactiveWebServerFactory; import org.springframework.boot.web.server.WebServerFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class WebServerConfig { @Bean public WebServerFactory webServerFactory() { return new NettyReactiveWebServerFactory(); // 使用Netty替代Tomcat } }

这样Spring Boot启动时会加载Netty容器,放弃默认的Tomcat。Netty的事件驱动模型天生支持高并发场景,比如实时推送服务、大规模的WebSocket应用等,比Tomcat稳定而高效。某金融公司曾在处理数十万实时连接时,因Tomcat频繁出现连接数耗尽问题,改用Netty后,并发处理能力提升了一倍,系统的稳定性也显著提高。

换句话说,Tomcat并不是完全不行,但它对高并发、长连接场景支持有限,且在处理大量请求时的同步锁管理容易造成性能瓶颈。所以,才有些公司在Spring Boot项目中禁止使用Tomcat,选择Netty或Undertow等容器来保证项目的高并发性能与稳定性。

最后,分享一个不错的编程导航网站,里面有大量的免费教程供你学习:

j301.cn/java.html

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/9663.html

分享给朋友:

相关文章

网易云音乐里有哪些打动你的评论?

1.“如果我被强奸了,有人说我会失去贞操。”“我怎么失去贞操了呢?” “我的贞操不在我的阴道里。”“失去贞操的是强奸犯,而不是被强奸的人。”2.但要记得那年海边的烟火,我们不拘一格 ,嘲笑过生活。………网易云热评《这样就很好》3.“ 我们在...

你是如何在不依靠工资收入的情况下赚到一万元的?

你是如何在不依靠工资收入的情况下赚到一万元的?

分享几个路子稳,门槛低,变现快,适合年轻人的靠谱的副业。绝对不是送外卖、滴滴、搬砖等等的苦力活,这几个副业都是能是性价比极高,还能让你快速成长的工作。想通过副业实现暴富、立马月入过万的同学,建议速速划走。今天撇哥就给大家分享100+个靠谱赚...

在 Kubernetes 中,Service 的实现原理是什么,它是如何实现服务发现的?

行,问的这个问题挺有意思,Kubernetes 里 Service 是怎么实现的,服务发现是怎么回事,咱就直说了。这事儿看起来挺玄乎,但掰开揉碎了讲,也就那么回事。你得把这事儿想得简单点,别一上来就被啥术语吓住了——其实全是些搬砖的套路。咱...

为什么张雪峰什么专业都懂?

他不懂专业,他懂的是就业。我记得有个老哥,家里条件不好,母亲吸血。想脱离家庭张雪峰眼睛一亮就说这是个学土木的好苗子。作为土木人我可知道他说的太对了,这种人学土木毕业进中建中铁,直接给你拉非洲看大鳄鱼呲牙。工资不低还能脱离家庭,可不是个学土木...

本专业是电气的,请问入门plc 必须要从电工接线开始吗,我怕被公司骗了,想请教各位?

本专业是电气的,请问入门plc 必须要从电工接线开始吗,我怕被公司骗了,想请教各位?

开关接线图PART 01一开单控开关接线图二三开连体单控开关接线图四开连体单控开关接线图一开五孔单控插座接线图二开五孔单控插座接线图一开双控开关接线图二三开单控开关接线图四开单控开关接线图一开五孔单控插座接线图二三开双控开关接线图一开多控开...

苏宁是怎么堕落的?

苏宁是怎么堕落的?

张近东终究还是要为自己得鲁莽买单,如今的苏宁大不如前,甚至是大势已去。记得刘强东曾经说过:一成不变的人很难有出路,更何况做企业的老板。别看如今传统行业表面风光无限,背地里早已经千疮百孔!任何一家民营企业如果不做出改变,依旧在原地踏步,等待的...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。