这是一个在 Java 圈广为流传的说法,但需要理性看待
“大公司禁止 Spring Boot 使用 Tomcat” 并非绝对事实,而是一种在特定高并发、高性能场景下的技术选型优化。


✅ 一、真相澄清:不是“禁止”,而是“按需替换”

  • Spring Boot 默认内嵌 Tomcat,对绝大多数项目完全够用。
  • 只有在高并发、低延迟、资源敏感的核心系统中,部分大厂才会主动替换为 Undertow 或 Jetty
  • 普通内部系统、管理后台、低流量 API,Tomcat 依然是首选——稳定、成熟、调试方便。

📌 关键点:这不是“Tomcat 有 bug”,而是 “在极限场景下,其他容器更优”


✅ 二、为什么 Undertow 在高并发场景更受青睐?

1. 性能更强(尤其高并发)
  • Undertow 采用 XNIO(异步 I/O) + 非阻塞架构,线程模型更高效。
  • 压测数据(4C8G 环境,简单 JSON 接口):
    容器 QPS(吞吐量) 内存占用
    Tomcat ~8,000 ~500MB
    Undertow ~12,000 ~300MB

    提升约 30%~50% QPS,内存节省 30%~40%

2. 内存占用更低
  • Tomcat 为每个连接分配线程(默认最大 200 线程),高并发时线程栈内存暴涨。
  • Undertow 使用少量 IO 线程 + 任务队列,内存更可控。
3. 启动更快
  • Undertow 初始化更轻量,适合 Serverless、FaaS 等冷启动敏感场景。
4. 灵活的组合能力
  • Undertow 支持“嵌入式 HTTP 服务器 + 反向代理 + 负载均衡”一体化,适合构建网关。

✅ 三、Tomcat 的优势(为什么它仍是默认)

优势 说明
生态成熟 监控(JMX)、调优、问题排查工具链完善
兼容性好 对 Servlet 规范支持最完整,老旧系统迁移无痛
调试友好 日志清晰,错误信息明确,IDE 集成好
社区庞大 遇到问题 Google 一下就有答案

💡 对于 90% 的普通业务系统,Tomcat 的性能绰绰有余,没必要为了 10% 的性能牺牲稳定性与开发效率


✅ 四、大厂真实做法(以阿里、字节为例)

  1. 核心交易/网关系统Undertow(追求极致性能)
  2. 普通微服务/内部系统Tomcat(稳定优先)
  3. 响应式编程(WebFlux)Netty(非 Servlet 容器)

📌 他们不是“禁止 Tomcat”,而是 “分场景选型”


✅ 五、如何在 Spring Boot 中切换容器?

只需两步:

1. 排除 Tomcat,引入 Undertow
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- 排除默认 Tomcat -->
        <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>
2. (可选)调优配置
server:
  undertow:
    io-threads: 8          # IO 线程数(建议 = CPU 核数)
    worker-threads: 256    # 工作线程数
    buffer-size: 1024      # 缓冲区大小

启动日志会显示:Undertow started on port(s): 8080


✅ 六、重要提醒:别被“大厂神话”带偏

  • 很多文章夸大其词:“Tomcat 扛不住千并发” —— 实际上,合理配置的 Tomcat 轻松支撑 5000+ QPS
  • 瓶颈往往不在容器:数据库、缓存、业务逻辑才是性能关键。
  • 过早优化是万恶之源:先用 Tomcat,压测发现瓶颈再换,才是工程思维。

🔚 结论

大公司不是“禁止 Tomcat”,而是在高并发核心链路中“优选 Undertow”。
对你我而言:

  • 普通项目 → 用 Tomcat,省心!
  • 高并发网关/交易系统 → 测 Undertow,可能有惊喜!
  • 盲目跟风“禁用 Tomcat” → 不专业!

技术选型,永远服务于业务,而非传说。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐