当前位置:首页 > 每日看点

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

卡卷网2年前 (2025-01-17)每日看点290

谢邀!

说到底,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

分享给朋友:

相关文章

一条音频千万播放!喜马拉雅如何成为亿万女性用户的情感树洞?

一条音频千万播放!喜马拉雅如何成为亿万女性用户的情感树洞?

哪个时刻你觉得自己很孤独,是母胎单身20余年渴望被陪伴,是因为身材焦虑渴望被接受,是走在创业独木桥上渴望被支持,还是困在产后抑郁中渴望被理解?…

有什么音乐软件可以全部免费下载歌曲?

有什么音乐软件可以全部免费下载歌曲?

作为音乐发烧友, 我几乎把市面上所有的 发烧碟、试音碟,全都给收藏,下载下来了!音质都是无损的,品质特别高,有5.1环绕的、有DTS的、有中文的、有英文的。 大家可以看看这个音乐目录,大概有30万张专辑。 有需要下载软件的朋友,可以双击…

请问什么软件支持看电视直播?

请问什么软件支持看电视直播?

2024年9月6日最新更新:本文列举的 所有看电视直播、或流媒体影视资源点播的软件,我这两天又重新梳理成最新版本,最大程度保证可用性。获取方式见文末图片,或见评论。后续我也将持续更新,文章是旧的软件也会是新的,保证你拿到的都是最新可用版本。…

有了Istio,开发还需要微服务架构吗?

有了Istio,开发还需要微服务架构吗?

Istio 是一个开源的服务网格(Service Mesh),通过它可以实现对服务间通信的管理和监控。对于那些本身没有设计为具备安全功能的传统应用程序,Istio 可以提供一个“透明”的安全保护层,而不需要对应用本身进行任何代码修改。…

知乎创作收益高吗?

知乎创作收益高吗?

高啊,主要是大多数人不知道怎么做。(这是以前写的,请看到最后) 我之前就是傻傻写问答,文章,结果一毛钱收益没有。 知乎上收益高的主要有盐选,好物推荐,致知计划,付费咨询。1、盐选吧,是写故事,小说类的天堂,还有就是大咖们的地盘了,难度高。…

Layui 不更新了么?

Layui 不更新了么?

layui2.8已经于今天正式发布了,新增优化了大量特性,这里按照layui更新日志的模块结构,详细为你一一介绍。 基础风格调整 新版调整主色调为 #16baaa,在原有的墨绿基础上赋予了清新。 更简单的构建构建代码更简单,除字体外…

发表评论

访客

看不清,换一张

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