在 Spring Boot 中配置 Tomcat 监听多个端口

在现代微服务架构中,应用程序可能需要监听多个端口,以支持不同的服务或协议。Spring Boot 提供了灵活的配置选项,使得这一需求变得简单而高效。本文将介绍如何在 Spring Boot 中配置 Tomcat 以监听多个端口,并简要说明其中一些关键组件的作用。

代码实现

以下是一个示例配置类 MultiPortTomcatConfig,它允许 Tomcat 监听多个端口:

java 复制代码
@Configuration
public class MultiPortTomcatConfig {

    @Value("${server.configuredPorts:12307,12308,12309,12310,12311,12312}")
    private String configuredPorts;

    @Bean
    public TomcatServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
        Connector[] additionalConnectors = this.createAdditionalConnectors();
        if (additionalConnectors != null && additionalConnectors.length > 0) {
            tomcat.addAdditionalTomcatConnectors(additionalConnectors);
        }
        return tomcat;
    }

    private Connector[] createAdditionalConnectors() {
        if (StringUtils.isBlank(this.configuredPorts)) {
            return null;
        }
        String[] ports = this.configuredPorts.split(",");
        List<Connector> result = new ArrayList<>();
        for (String port : ports) {
            Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
            connector.setScheme("http");
            connector.setPort(Integer.parseInt(port));
            result.add(connector);
        }
        return result.toArray(new Connector[0]);
    }
}
TomcatServletWebServerFactory:

这是一个 Spring Boot 提供的工厂类,用于创建嵌入式 Tomcat 服务器的实例。通过这个类,我们可以自定义 Tomcat 的行为。

Connector:

Tomcat 的连接器用于处理 HTTP 请求。在本例中,我们为每个配置的端口创建了一个连接器,并设置协议为 Http11NioProtocol,这是一种高效的 HTTP 处理方式。

createAdditionalConnectors:

该方法解析配置的端口字符串,并为每个端口创建一个 Connector 实例。最终返回一个连接器数组。

提醒:确保这个配置类被Spring扫描加载

相关推荐
阿猿收手吧!9 小时前
【C++】volatile与线程安全:核心区别解析
java·c++·安全
Hui Baby9 小时前
Java SPI 与 Spring SPI
java·python·spring
摇滚侠9 小时前
Maven 教程,Maven 安装及使用,5 小时上手 Maven 又快又稳
java·maven
倔强菜鸟9 小时前
2026.2.2--Jenkins的基本使用
java·运维·jenkins
hai74259 小时前
在 Eclipse 的 JSP 项目中引入 MySQL 驱动
java·mysql·eclipse
瑞雪兆丰年兮9 小时前
[从0开始学Java|第十一天]学生管理系统
java·开发语言
看世界的小gui9 小时前
Jeecgboot通过Maxkey实现单点登录完整方案
java·spring boot·jeecgboot
Arvin6279 小时前
IntelliJ IDEA:无法读取**.properties
java·intellij-idea
10km9 小时前
Spring Boot 环境下使用 Map<String, MultipartFile> 实现文件上传功能
java·spring boot·mock·map·multipartfile
yangminlei10 小时前
使用 Cursor 快速创建一个springboot项目
spring boot·ai编程