Claude/Codex CLI 搞定!世界级 Agent 工程师只用这几招,效率翻倍!
2026/3/29 22:16:33
严格来说,不是所有大公司都绝对禁止使用Spring Boot的默认嵌入式Tomcat(它是Spring Boot的默认Web服务器),但在许多互联网大厂(如阿里、腾讯、京东等高并发业务场景),强烈推荐或强制替换为Undertow(有时也用Jetty)。这已成为一种常见的技术规范和最佳实践。原因主要集中在性能、资源消耗和高并发支持上,尤其在微服务时代。
Spring Boot默认嵌入Tomcat方便开发,但Tomcat设计较“传统”,在极端高并发下有瓶颈:
Undertow(Red Hat开源,WildFly默认容器)则专为现代高性能设计:
实际测试数据对比(相同硬件、模拟高并发请求):
| 指标 | Tomcat | Undertow | Jetty | 备注 |
|---|---|---|---|---|
| 吞吐量 (QPS) | 基准 | +30-100% | +10-50% | Undertow 最强,尤其IO密集 |
| 内存占用 | 高 | 最低 | 中等 | Undertow 适合微服务密集部署 |
| CPU 使用 | 中高 | 低 | 低 | 长连接场景 Undertow 胜出 |
| 启动时间 | 中等 | 最快 | 快 | 云原生友好 |
| 高并发稳定性 | 易线程耗尽 | 优秀(非阻塞) | 好 | Undertow 默认持久连接 |
(数据来源于多个基准测试,如JavaCodeGeeks、51CTO等,实际视业务而异)
阿里巴巴Java开发手册中未明确禁Tomcat(重点在编码规范),但社区和大厂实践(如阿里内部许多团队)倾向Undertow。
在pom.xml中排除Tomcat,引入Undertow:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions></dependency><!-- 引入 Undertow --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency>重启项目,日志显示:Undertow started on port(s) 8080。
Jetty替换类似(starter-jetty),适合长连接/WebSocket场景。
如果你在公司遇到这个规范,恭喜你——这是个好习惯,能让你项目更扛打~有具体压测数据或经历,欢迎分享!😂