SpringBoot嵌入式容器与Web项目启动
SpringBoot 内嵌 Servlet 容器,简化 Web 应用部署。
内置容器支持
| 容器 | 默认 | 说明 |
|---|---|---|
| Tomcat | 是 | 默认容器 |
| Jetty | 否 | 轻量高性能 |
| Undertow | 否 | 非阻塞高性能 |
Tomcat默认配置
YAML
server:
port: 8080
tomcat:
# 最大连接数
max-connections: 10000
# 最大工作线程
threads:
max: 200
min-spare: 10
# 接收请求队列
accept-count: 100
# 连接超时
connection-timeout: 20000
切换容器
切换到Jetty
XML
<dependencies>
<!-- 排除Tomcat -->
<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>
<!-- 添加Jetty -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
</dependencies>
切换到Undertow
XML
<dependencies>
<!-- 排除Tomcat -->
<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>
</dependencies>
容器配置对比
| 配置项 | Tomcat | Jetty | Undertow |
|---|---|---|---|
| 端口配置 | server.port | 相同 | 相同 |
| 线程配置 | server.tomcat.threads | server.jetty.threads | server.undertow.threads |
| 最大连接 | server.tomcat.max-connections | server.jetty.max-connections | server.undertow.max-connections |
Undertow配置
YAML
server:
undertow:
# IO线程数
io-threads: 16
# 工作线程数
worker-threads: 200
# 缓冲区大小
buffer-size: 1024
# 直接缓冲区
direct-buffers: true
自定义容器配置
Java
@Configuration
public class TomcatConfig {
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory>
tomcatCustomizer() {
return factory -> {
factory.setPort(8081);
factory.setContextPath("/app");
factory.addConnectorCustomizers(connector -> {
connector.setProperty("maxConnections", "5000");
connector.setProperty("connectionTimeout", "10000");
});
};
}
}
启动流程
Java
main() → SpringApplication.run()
→ createApplicationContext()
→ refreshContext()
→ onRefresh() → 创建嵌入式容器
→ finishRefresh() → 启动容器
→ 应用就绪
启动事件监听
XML
@Component
public class StartupListener implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
log.info("应用启动完成,容器: {}", event.getApplicationContext()
.getEnvironment().getProperty("server.servlet.container"));
}
}
打包部署
JAR包部署(推荐)
Bash
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
XML
mvn clean package
java -jar target/app.jar
WAR包部署(传统方式)
Java
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 保留Tomcat依赖用于本地开发 -->
<scope>provided</scope>
</dependency>
</dependencies>
text
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
容器性能对比
| 场景 | 推荐 |
|---|---|
| 传统Servlet应用 | Tomcat |
| 高并发长连接 | Undertow |
| 低资源轻量应用 | Jetty |
Undertow非阻塞IO适合高并发,Tomcat稳定成熟适合企业应用。
要点总结
- SpringBoot默认内嵌Tomcat容器
- 排除tomcat starter后添加其他容器starter切换
- JAR包部署是SpringBoot推荐方式
- 可通过WebServerFactoryCustomizer自定义容器配置
- Undertow适合高并发场景
📝 发现内容有误?点击此处直接编辑