在 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扫描加载

相关推荐
coderSong25683 小时前
Java高级 |【实验八】springboot 使用Websocket
java·spring boot·后端·websocket
Mr_Air_Boy3 小时前
SpringBoot使用dynamic配置多数据源时使用@Transactional事务在非primary的数据源上遇到的问题
java·spring boot·后端
豆沙沙包?4 小时前
2025年- H77-Lc185--45.跳跃游戏II(贪心)--Java版
java·开发语言·游戏
年老体衰按不动键盘4 小时前
快速部署和启动Vue3项目
java·javascript·vue
咖啡啡不加糖4 小时前
Redis大key产生、排查与优化实践
java·数据库·redis·后端·缓存
liuyang-neu5 小时前
java内存模型JMM
java·开发语言
UFIT5 小时前
NoSQL之redis哨兵
java·前端·算法
刘 大 望5 小时前
数据库-联合查询(内连接外连接),子查询,合并查询
java·数据库·sql·mysql
怀旧,5 小时前
【数据结构】6. 时间与空间复杂度
java·数据结构·算法
懒虫虫~5 小时前
基于SpringBoot解决RabbitMQ消息丢失问题
spring boot·rabbitmq