全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-18 6 分钟 ✍️ juanwangdev

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>

容器配置对比

配置项TomcatJettyUndertow
端口配置server.port相同相同
线程配置server.tomcat.threadsserver.jetty.threadsserver.undertow.threads
最大连接server.tomcat.max-connectionsserver.jetty.max-connectionsserver.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适合高并发场景

📝 发现内容有误?点击此处直接编辑

← 上一篇 SpringBoot HTTP请求处理
下一篇 → SpringBoot快速创建WEB项目
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库