云计算百科
云计算领域专业知识百科平台

Spring Boot 支持的内嵌服务器(Tomcat、Jetty、Undertow、Netty(用于 WebFlux 响应式应用))详解

Spring Boot 支持的内嵌服务器详解

在这里插入图片描述


1. 支持的内嵌服务器

Spring Boot 默认支持以下内嵌服务器:

  • Tomcat(默认)
  • Jetty
  • Undertow
  • Netty(用于 WebFlux 响应式应用)

  • 2. 各服务器使用示例

    (1) Tomcat(默认)

    特点:最广泛使用,适合传统 Spring MVC 应用。

    代码示例

    <!– pom.xml(无需额外依赖,Tomcat默认已包含) –>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    // 启动类(无需修改)
    @SpringBootApplication
    public class Application {
    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
    }


    (2) Jetty

    特点:轻量级,支持 WebSocket 和嵌入式 JDBC。

    代码示例

    <!– pom.xml(排除Tomcat并添加Jetty依赖) –>
    <dependencies>
    <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>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
    </dependency>
    </dependencies>

    // 启动类保持不变
    @SpringBootApplication
    public class Application {
    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
    }


    (3) Undertow

    特点:高性能,非阻塞 I/O,适合高并发场景。

    代码示例

    <!– pom.xml(排除Tomcat并添加Undertow依赖) –>
    <dependencies>
    <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>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>
    </dependencies>

    // 启动类保持不变
    @SpringBootApplication
    public class Application {
    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
    }


    (4) Netty(WebFlux 响应式应用)

    特点:基于事件驱动,适合异步非阻塞场景(如微服务、高吞吐量 API)。

    代码示例

    <!– pom.xml(需切换到WebFlux并添加Netty依赖) –>
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    </dependency>
    <dependency>
    <groupId>io.projectreactor.netty</groupId>
    <artifactId>reactor-netty-http</artifactId>
    </dependency>
    </dependencies>

    // 启动类需标注 @SpringBootApplication 并包含 @EnableWebFlux(可选)
    @SpringBootApplication
    public class Application {
    public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
    }
    }


    3. 配置内嵌服务器的通用方式

    所有服务器可通过 application.properties 统一配置:

    server.port=8080
    server.servlet.context-path=/api
    server.tomcat.max-threads=200 # Tomcat 特定配置
    server.undertow.io-threads=80 # Undertow 特定配置


    4. 对比表格:优缺点分析
    服务器适用场景性能特点资源占用线程模型WebSocket 支持文档与生态
    Tomcat 传统 Spring MVC 应用 平衡,成熟稳定 中等 阻塞 I/O 支持 最广泛支持
    Jetty 需要 WebSocket 或轻量级部署 中等性能,轻量 较低 支持非阻塞 原生支持 较成熟但社区活跃度较低
    Undertow 高并发、低延迟、高吞吐场景 高性能,非阻塞 I/O 非阻塞(线程复用) 支持 适合现代高性能应用
    Netty 响应式 WebFlux 应用 极高性能,异步非阻塞 极低 事件驱动 支持(需配置) 需熟悉响应式编程

    5. 详细优缺点对比

    (1) Tomcat
    • 优点:
      • 默认配置,开箱即用。
      • 社区支持广泛,文档丰富。
      • 与传统 Spring MVC 完全兼容。
    • 缺点:
      • 高并发下线程数较多,资源占用较高。
      • 非阻塞 I/O 支持有限。

    (2) Jetty
    • 优点:
      • 轻量级,启动速度快。
      • 原生支持 WebSocket 和嵌入式 JDBC。
      • 适合需要轻量级容器的场景。
    • 缺点:
      • 性能略低于 Undertow。
      • 配置选项相对复杂。

    (3) Undertow
    • 优点:
      • 非阻塞 I/O,适合高并发场景。
      • 资源占用低,内存效率高。
      • 支持 HTTP/2 和 WebSocket。
    • 缺点:
      • 部分传统 Spring 特性(如 JSP)支持有限。
      • 配置需熟悉其线程池参数。

    (4) Netty
    • 优点:
      • 事件驱动模型,适合高吞吐量、低延迟场景。
      • 原生支持响应式编程(WebFlux)。
      • 轻量且高性能。
    • 缺点:
      • 需要应用采用响应式编程模型(WebFlux)。
      • 配置和调试复杂度较高。

    6. 选择建议
    需求推荐服务器理由
    传统 Spring MVC 应用 Tomcat 成熟稳定,无需额外配置。
    WebSocket 或轻量级部署 Jetty 原生支持 WebSocket,启动速度快。
    高并发、低延迟 API Undertow 非阻塞 I/O,资源效率高。
    响应式 WebFlux 应用 Netty 与 Reactor 生态无缝集成,性能最优。

    7. 示例代码补充

    (1) 配置 Undertow 线程池

    # application.properties
    server.undertow.io-threads=80 # I/O 线程数
    server.undertow.worker-threads=64 # 工作线程数


    (2) 配置 Jetty WebSocket

    // 配置 WebSocket 端点
    @Configuration
    public class WebSocketConfig {
    @Bean
    public ConfigurableServletWebServerFactory webServerFactory() {
    JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
    factory.addServerCustomizers(server -> {
    server.setStopAtShutdown(true);
    // 配置 WebSocket 插件
    server.setConnectors(new Connector[]{new ServerConnector(server)});
    server.setHandler(new WebSocketHandler());
    });
    return factory;
    }
    }


    (3) Netty 响应式应用示例

    // 响应式控制器
    @RestController
    public class UserController {
    @GetMapping("/users/{id}")
    public Mono<User> getUser(@PathVariable String id) {
    return userService.findById(id); // 返回 Mono 对象
    }
    }


    8. 注意事项
  • 切换服务器需排除默认依赖:如从 Tomcat 切换到 Jetty,需在 pom.xml 中排除 spring-boot-starter-tomcat。
  • WebFlux 仅支持 Netty 或 Undertow:若使用响应式编程,需选择非阻塞服务器。
  • WebSocket 支持:Tomcat、Jetty、Undertow 原生支持,Netty 需通过 WebFlux 配置。

  • 9. 总结

    Spring Boot 提供了多种内嵌服务器以适应不同场景:

    • Tomcat:传统应用首选。
    • Jetty:轻量级与 WebSocket 场景。
    • Undertow:高并发与低延迟需求。
    • Netty:响应式架构(WebFlux)必备。

    根据应用需求选择合适的服务器,可显著提升性能和资源利用率。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Spring Boot 支持的内嵌服务器(Tomcat、Jetty、Undertow、Netty(用于 WebFlux 响应式应用))详解
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!