Spring Boot 定制嵌入式 Servlet 容器详解:配置修改与容器替换实战
Spring Boot 内置了 Tomcat(默认)、Jetty、Undertow 三种主流 Servlet 容器,无需外置服务器即可通过 java -jar 直接启动应用。实际开发中,常需根据需求 “修改容器配置”(如端口、编码)或 “替换容器”(如用 Jetty 替代 Tomcat)。从 “容器配置修改(两种方式)→ 容器替换(Tomcat 转 Jetty/Undertow)→ 底层原理” 三个维度,系统讲解嵌入式 Servlet 容器的定制方法,帮你灵活掌控应用部署环境。
嵌入式 Servlet 容器简介
Spring Boot 嵌入式容器的核心价值是 “简化部署”—— 无需手动安装、配置外置服务器(如 Tomcat),应用打包为 JAR 包后可独立运行。三种内置容器的特点对比如下:
| 容器名称 |
核心特点 |
适用场景 |
默认依赖 artifactId |
| Tomcat |
功能全面、兼容性好、社区活跃 |
绝大多数 Web 应用(默认选择) |
spring-boot-starter-tomcat |
| Jetty |
轻量级、启动快、内存占用低 |
轻量级应用、微服务(如 Spring Cloud 服务) |
spring-boot-starter-jetty |
| Undertow |
高性能、异步非阻塞、支持 HTTP/2 |
高并发场景(如秒杀、API 网关) |
spring-boot-starter-undertow |
默认情况下,引入 spring-boot-starter-web 会自动依赖 Tomcat 容器,无需额外配置。
修改嵌入式 Servlet 容器配置
Spring Boot 提供两种方式修改容器配置(如端口、编码、连接超时),分别适用于 “简单配置” 和 “复杂定制” 场景。
方式一:配置文件修改(推荐,简单场景)
通过 application.properties 或 application.yml 直接配置 server 前缀的属性,Spring Boot 会自动将配置映射到容器(底层通过 ServerProperties 类实现)。
1. 核心配置属性(常用)
| 配置项 |
作用描述 |
示例值 |
适用容器 |
server.port |
应用端口(0 表示随机端口) |
8081、0 |
所有 |
server.servlet.context-path |
应用上下文路径(默认 /) |
/demo |
所有 |
server.tomcat.uri-encoding |
Tomcat 编码格式(避免中文乱码) |
UTF-8 |
Tomcat |
server.tomcat.max-threads |
Tomcat 最大线程数(控制并发能力) |
200 |
Tomcat |
server.tomcat.connection-timeout |
Tomcat 连接超时时间(毫秒) |
20000(20 秒) |
Tomcat |
server.jetty.max-http-post-size |
Jetty 最大 POST 请求大小 |
10MB |
Jetty |
server.undertow.io-threads |
Undertow IO 线程数(处理连接) |
4(默认 CPU 核心数) |
Undertow |
2. 配置示例(YML 格式)