Spring Boot 项目默认内置 Tomcat,这是绝大多数场景下的最佳选择。但具体选型需结合项目需求、部署环境和团队技术栈综合判断:
✅ 首选:嵌入式 Tomcat(默认)
- 适用场景:90% 以上的 Spring Boot 应用(Web 服务、微服务、内部系统)
- 优势:
- 开箱即用,无需额外配置外部服务器
- 与 Spring Boot 深度集成(自动配置、健康检查等)
- 社区支持完善,文档丰富
- 性能稳定,适合高并发场景(配合调优可支撑万级 QPS)
- 示例依赖(
pom.xml):<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <!-- 默认包含 tomcat --> </dependency>
🔄 其他可选方案(按需选择)
| 服务器 | 适用场景 | 注意事项 |
|---|---|---|
| Undertow | 需要更高内存效率/低延迟场景(如实时计算网关) | 替换 Tomcat 依赖:<exclusions><exclude>org.apache.tomcat.embed:tomcat-embed-core</exclude></exclusions><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId></dependency> |
| Jetty | 轻量级容器、嵌入式测试环境、某些云原生场景 | 类似 Undertow,需显式排除 Tomcat 并引入 Jetty Starter |
| 外部 Tomcat/Jetty | 遗留系统集成、需统一运维平台管理 | 禁用嵌入式服务器:spring.main.web-application-type=none通过 WAR 包部署到外部容器 |
⚠️ 关键决策建议
- 不要过度优化:除非有明确性能瓶颈(如 CPU 持续 >80% 或内存泄漏),否则优先使用默认 Tomcat。
- 云原生场景:Kubernetes/Docker 中嵌入式服务器更简单(单进程启动,资源隔离清晰)。
- 特殊需求才换:
- 需要 WebSocket 高级功能?→ Tomcat 8+ 已支持,通常无需更换
- 极端低延迟要求?→ 实测 Undertow vs Tomcat(JMeter 压测验证)
- 已有成熟运维体系?→ 考虑外部部署模式
💡 实践提示:在
application.properties中可快速切换:# 启用 Undertow spring.main.web-application-type=servlet server.port=8080 # 实际通过 starter 依赖控制,而非配置项直接切换
结论:无特殊需求时,坚持使用默认 Tomcat。仅在性能压测后确认存在瓶颈,且替代方案经实测提升显著时,再考虑切换。
CLOUD云枢