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

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

卡卷网1年前 (2025-01-17)每日看点226

谢邀!

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

分享给朋友:

相关文章

为什么我感受不到 1500 元的手机比四五千的差?

我长期使用两千元左右的安卓机,一天接近8小时的重度手机使用者。某天我突然想试试看传说中非常赛艇的苹果。狠了心,砸了钱。七千大样买了爱疯。就这?什么辣鸡玩意。而且因为我一直更新软件,用了两年爱疯就卡了。并没有传说中的用四五年不卡。用了这么一次...

苹果为什么不做千元机?

苹果为什么不做千元机?

第一步,打开苹果官网,注意是.com,不是.cn;第二步,点击iPhone,选择Compare iPhone;第三步,选择最新iPhone 15系列,查看起售价格,分别为$1199,$999,$799。这不妥妥的千元机吗,怎么苹果就不做千元...

鸿蒙到底是不是安卓套壳?

鸿蒙到底是不是安卓套壳?

把它是不是套壳先放在一边吧。我讲一个事情,大家自己判断。华为有一个应用,叫手机管家。这个手机管家对一些系统底层设置有影响:比如华为从 EMUI 9 开始不允许将第三方启动器设置为默认启动器,依靠的就是这个手机管家。为什么这么说呢?在网上搜索...

有没有高手指点一下Google做SEO现在的技巧啊?心好累。

有没有高手指点一下Google做SEO现在的技巧啊?心好累。

搜索引擎优化 (SEO) 的目标是让 Google 在用户输入相关搜索查询时提供您的网页链接。虽然没有固定的蓝图可以保证您获得最高排名,但有几种 SEO 最佳实践(您可以将其视为 SEO 规则)可以增加您在非付费结果中获得良好排名的机会。谷...

为什么不建议买游戏本?

我建议厂家改名厂家犯了个巨大错误:游戏本的主要受众是在校大学生,但大学生买电脑的买单人是他们的父母。你让父母给孩子买个游戏本,父母怎么想?如果你改成高效学习本、优质学习本、智能学习本、高速学习本,甚至硕博连读本,你看看家长舍不舍得砸这个钱...

我怎么也无法理解网络游戏为什么会有外挂?

我怎么也无法理解网络游戏为什么会有外挂?

因为你把服务器想象成了无所不能的上帝;但在我们程序猿眼里,服务器不过是一个黑大傻粗的计算器。比如说,我们在某个位置打开一个宝箱:那么,你觉得,程序背后应该做了些什么呢?一、天真的玩法天真的程序猿会觉得,啊,这事简单!我就告诉服务器,用户ID...

发表评论

访客

看不清,换一张

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