Spring Boot 2 中缺少 TomcatEmbeddedServletContainerFactory

作者:编程家 分类: spring 时间:2025-09-18

在Spring Boot 2中,我们注意到TomcatEmbeddedServletContainerFactory这个类不再可用。这是因为在Spring Boot 2中,官方不再建议直接使用TomcatEmbeddedServletContainerFactory来配置嵌入式的Tomcat容器。相反,官方推荐使用ServletWebServerFactory接口来配置嵌入式的Servlet容器。

使用嵌入式的Servlet容器是Spring Boot的一大特性,它允许我们将应用程序打包成一个可执行的jar文件,无需部署到外部的Web服务器。在Spring Boot 1.x版本中,我们可以使用TomcatEmbeddedServletContainerFactory来定制嵌入式的Tomcat容器,但在Spring Boot 2中,这个类不再建议使用。

那么,如何在Spring Boot 2中配置嵌入式的Servlet容器呢?下面我们来看一个示例代码:

java

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.web.servlet.ServletComponentScan;

import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;

import org.springframework.boot.web.servlet.server.ServletWebServerFactory;

import org.springframework.context.annotation.Bean;

@SpringBootApplication

@ServletComponentScan

public class Application {

public static void main(String[] args) {

SpringApplication.run(Application.class, args);

}

@Bean

public ServletWebServerFactory servletContainer() {

// 使用ServletWebServerFactory接口来配置嵌入式的Servlet容器

// 这里我们选择使用Tomcat作为嵌入式的Servlet容器

TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();

factory.setPort(8080); // 设置端口号

// ... 其他定制配置

return factory;

}

}

在上面的示例代码中,我们使用了ServletWebServerFactory接口来配置嵌入式的Servlet容器。具体来说,我们选择了TomcatServletWebServerFactory作为嵌入式的Tomcat容器。通过调用factory的各种方法,我们可以定制嵌入式Tomcat容器的各种属性,比如端口号、SSL配置、错误页面等等。

使用ServletWebServerFactory来配置嵌入式的Servlet容器的好处有哪些呢?

首先,使用ServletWebServerFactory更加灵活。它允许我们选择不同的嵌入式Servlet容器,比如Tomcat、Jetty、Undertow等,以适应不同的需求。而在Spring Boot 1.x版本中,由于直接使用TomcatEmbeddedServletContainerFactory,我们只能选择Tomcat作为嵌入式的Servlet容器。

其次,使用ServletWebServerFactory可以让我们享受到Spring Boot 2带来的全新特性。Spring Boot 2对Servlet容器的配置做了很多改进,比如支持HTTP/2、WebSockets、非阻塞I/O等等。如果我们直接使用TomcatEmbeddedServletContainerFactory,就无法享受到这些新特性。

如何选择合适的嵌入式Servlet容器?

在选择嵌入式Servlet容器时,我们需要考虑应用程序的特性和性能需求。比如,如果我们的应用程序需要支持大量并发请求,那么可以选择性能更好的容器,比如Undertow。而如果我们的应用程序需要支持WebSocket通信,那么可以选择支持WebSocket的容器,比如Tomcat。

总的来说,使用ServletWebServerFactory接口来配置嵌入式的Servlet容器是Spring Boot 2的推荐做法。它更加灵活,可以选择不同的嵌入式Servlet容器,并且可以享受到Spring Boot 2带来的新特性。希望通过本文的介绍,大家对Spring Boot 2中配置嵌入式Servlet容器有了更深入的了解。