Spring Boot还能这样玩?同时监听多个端口的黑科技

Spring Cloud Alibaba微服务实战:1小时搭建Nacos+Gateway+Sentinel+Seata+RocketMQ 微服务架构是现代分布式系统设计的核心范式,通过将单体应用拆分为多个独立部署的服务单元,实现了业务解耦和团队协作效率的提升。其技术原理基于服务注册发现、配置管理、流量控制等核心机制,通过Spring Cloud Alibaba这样的标准化框架,开发者可以快速构建高可用的分布式系统。在技术价值层面,微服务架构显著提升了系统的可扩展性、容错能力和部署灵活性。在电商、金融、物联网等高频并发场景中,微服务架构能够有效支撑业务快速增长。Spring Cloud Alibaba作为阿里巴巴开源的微服务一站式解决方案,整合 阅读详情

01 引言

平时开发中常见的是一个Tomcat一个端口被访问。从来没有考虑过一个接口可以通过多个端口同时访问。

直到前两天看到一个帖子说,SpringBoot同时监听多个端口。于是自己玩了一下,感觉蛮有意思的,就整理一下分享给大家。

02 场景假设

假设有一套系统运行平稳,得到合作商的青睐,想要有一套一模一样的系统。领导要求重新部署一套,但是为了节省经费,领导不提供多余的服务器,希望能够在原来的服务器的基础上技能让自己用,也能让合作商使用。

# 自己使用
curl http://localhost:8081/a/api/foo

# 合作商使用
curl http://localhost:8082/b/api/foo

这样的情况下,聪明的你想到了同一个Tomcat开放两个端口,一个给自己用,一个给合作商用。

03 问题解决

3.1 开发多接口

我们先不管端口的分配,我们先看看能不能开方多个接口。当然可以。

我们需要配置org.springframework.boot.web.servlet.server.ServletWebServerFactoryl类:

@Bean
public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
    Connector aConnector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
    aConnector.setPort(8081);
    factory.addAdditionalTomcatConnectors(aConnector);

    Connector bConnector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
    bConnector.setPort(8082);
    factory.addAdditionalTomcatConnectors(bConnector);
    return factory;
}

这里开放了8081、8082两个接口。这两个接口不影响默认端口,加上默认端口8080总共有3个端口可以同时访问。

Java测试

@Slf4j
@RestController
@RequestMapping("/api")
public class FooController {

    @GetMapping("/foo")
    public String foo() {
        return "foo";
    }
}
# 可以访问的路径
curl http://localhost:8080/api/foo
curl http://localhost:8081/api/foo
curl http://localhost:8082/api/foo

上面的三种方式都可以访问。这就实现了一个接口三个端口都可以访问的效果。

3.2 端口分配

为了实现不同接口的资源隔离。我们将代码复制了一份,为了方便演示,修改了一点提示语。

假设FooController控制层给自己用,使用8081端口,并加前缀a。而FooV2Controller给合作商用,使用8082端口,并加前缀b。

我们将在不改变控制层代码的情况下,通过配置的方式完成资源的隔离。通过拦截器使用端口路由拦截。

public class MultiPortIntercpetor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        int localPort = request.getLocalPort();
        String requestURI = request.getRequestURI();
        if (localPort == 8081 && requestURI.startsWith("/a")) {
            return true;
        }
        if (localPort == 8082 && requestURI.startsWith("/b")) {
            return true;
        }

        Map<String, Object>  map = new HashMap<>();
        map.put("code", 404);
        map.put("success", false);
        map.put("message", "请求错误");
        response.setContentType("application/json;charset=UTF-8");
        response.getWriter().write(JSON.toJSONString(map));
        return false;
    }
}

拦截器的配置:

@Override
public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new MultiPortIntercpetor()).addPathPatterns("/**");
}

3.3 配置前缀

前两天刚好介绍了configurePathMatch配置方法,那我们就用起来。

@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.addPathPrefix("/a", clazz -> clazz.equals(FooController.class));
    configurer.addPathPrefix("/b", clazz -> clazz.equals(FooV2Controller.class));
}

这里的配置直接使用控制层的类,也可以通过自定义的注解获取比对。

3.4 测试

04 小结

这是一个有意思的技术点。真实场景一般不会通过一个Tomcat控制两套系统。而多端口真正的使用场景,小编暂时还想不到。大家都会用在什么地方,一起唠唠!

基于Spring AI Alibaba与MCP协议构建智能数据治理Agent 数据治理是企业数据资产管理的核心环节,旨在通过规范化的流程与工具确保数据的准确性、一致性与可用性。其核心原理在于建立统一的数据标准、模型与质量监控体系,以解决数据孤岛、口径不一等痛点。随着AI技术的发展,传统规则驱动的治理模式在应对非结构化数据与复杂场景时面临局限。通过引入AI Agent技术,结合大语言模型的语义理解与推理能力,能够实现数据治理的智能化升级。Spring AI Alibaba作为AI工程化框架,提供了统一的大模型集成抽象;而MCP协议则实现了AI能力与外部工具的安全、标准化对接。两者结合, 阅读详情

相关推荐

基于区块链的农产品溯源平台:Java+Spring Boot+FISCO BCOS混合架构实战

数据安全与可信追溯是供应链管理和食品安全领域的核心挑战。传统中心化数据库存在数据易被篡改、责任追溯困难等问题。区块链技术通过其分布式账本、哈希算法和共识机制,为数据提供了不可篡改、可追溯的信任基础。其技术价值在于构建多方参与下的可信数据协作网络,无需依赖单一中心化机构。这一特性使其在供应链金融、产品溯源、电子存证等场景中具有广泛应用前景。本文聚焦于农产品溯源这一具体应用,探讨如何利用Java、Spring Boot等主流企业级开发框架,结合FISCO BCOS联盟链,构建一个“链上存证哈希、链下存储详情”的

weixin_42531163的博客 332

springboot多开端口操作

选择启动类。

weixin_68693132的博客 1338

Springboot启用多个监听端口代码实例

主要介绍了Springboot启用多个监听端口代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

构建双端口 Spring Boot 应用:架构设计与实现方案

传统 Spring Boot 应用通常采用单一端口提供服务,但在某些业务场景下,我们需要在同一应用中部署多套独立服务。本文详细探讨如何构建"双面"应用,通过多端口架构实现服务隔离与统一部署。

2501_93078354的博客 454

stata 代码实现熵值法计算 含常见问题解答

2.标准化①正向指标②负向指标。

m0_74825360的博客 1217

程序设计二(面向对象)_实训10_复杂类的实现_ArrayList类的实现

第1关:构造函数与析构函数的实现

2401_83406306的博客 819

springboot 项目监听多个端口

步骤: 1.在配置文件添加 #端口设置 server.port=8088 server.additionalPorts: 8089,8090 2.编写ApplicationConfig.class类 import org.apache.catalina.connector.Connector; import org.springframework.boot.web.embedded.tomcat.*; import org.springframework.beans.factory.annotat.

qq_58280734的博客 2376

基于RK3588与FPGA的SDI视频处理系统:从MIPI CSI-2输入到DSI输出的全链路解析

本文深入解析了基于RK3588与FPGA的SDI视频处理系统全链路。系统利用FPGA作为高速接口转换与流管理核心,将SDI信号转换为MIPI CSI-2数据流送入RK3588进行智能图像处理与AI分析,处理结果再通过MIPI DSI回传,最终由FPGA控制编码为SDI输出,实现了专业视频接口与强大算力的高效协同。

s1t2u3的博客 666

JAVA spring-boot 开启俩端口

应用场景:微信小程序,需要一个https端口,正常后台是http端口 1.修改配置文件(.yml) # 开发环境配置 server: # 服务器的HTTP端口,默认为8080 port: 8080 # 新增开始 # https证书配置,不写就是俩http端口 # 证书放到 src/main/resources ssl: key-store: classpath:证书名.pfx key-alias: alias

Aa_duidui的博客 2366

基于ROS下的安卓手机图像和IMU跑ORB-SLAM3

接之前文章继续,手上没有现成的单目+IMU硬件,但是安卓手机几乎人人都有。因此,本文讲下如何用手机跑ORB-SLAM3的Mono和Mono_Inertial。 1. 手机与PC通信 基于ROS下的信息发布和订阅,手机和PC在一个局域网下进行信息(image和IMU)传输。 手机APK参考了github上的2个开源Android_Camera-IMU和android_ros_sensors,基于ros_java生成安卓APP,下载安装任一个APP到安卓手机,界面分别是这样: 手机和PC连一个无

h_372101的博客 1万+

Anthropic API接入指南:连接失败、403鉴权与Claude Code集成排查

在AI应用开发中,API接入与鉴权机制是开发者绕不开的基础工程问题。无论是调用云端模型服务还是自建网关,网络连通性、HTTP状态码语义、模型路由映射都会直接影响服务可用性。本文从通用的网络诊断与鉴权原理出发,梳理了从TCP连接失败到403权限拒绝的典型链路,并深入解析网关模型路由匹配机制。在此基础上,进一步说明如何通过环境变量完成Claude Code与VS Code的本地集成,以及一套基于Python的可复现接入方案。内容涵盖Anthropic API高频报错定位、curl冒烟测试、SDK工程化实践,适合

weixin_28743405的博客 465

Springboot中如何启用多个监听端口

@Configuration public class EmbeddedTomcatConfiguration { @Value("${server.additionalPorts}") private String additionalPorts; @Bean public EmbeddedServletContainerFactory servletCon...

u012005912的专栏 1万+

嵌入式开源项目哪里找

对比产生的伤害是经验思考积累下的差距,知道自己不知道什么然后前进去追寻。

quanquanxiaobu的博客 3938

Spring Boot + Spring AI 实现SSE流式输出与打字机效果

在构建现代AI应用时,提升用户体验的关键在于实现实时、流畅的交互。传统HTTP请求-响应模型的同步阻塞方式,在大语言模型(LLM)逐词生成内容的场景下,会导致用户长时间等待空白界面,体验不佳。Server-Sent Events(SSE)技术基于HTTP长连接,允许服务器将数据以事件流的形式主动、持续地推送给客户端,从而打破阻塞,实现数据的实时传输。这项技术的核心价值在于,它能将AI模型生成内容的“思考过程”可视化,为用户提供明确的进度反馈,极大地缓解等待焦虑。结合前端实现的“打字机效果”,每个词或句子像被

weixin_33693070的博客 353

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

Systemcall名屋 1685

Dify框架面试内容整理-如何进行Dify的二次开发?

无论是轻量修改界面,还是深度集成自定义模型、Agent、知识库,你都可以很方便地进行二次开发。,你可以基于它的开源架构对功能进行扩展、集成第三方服务、修改界面风格,甚至定制新的AI工作流程。前端:Node.js >= 16,React + TypeScript + Tailwind。接入自己的模型API(如:调用LLaMA、Baichuan、ChatGLM)。修改路径:/api/app/services/providers/可接入你自己的向量数据库(Qdrant、Milvus、FAISS)

不务正业的猿 2002

如何在 Spring Boot 中实现与物联网设备的通信?

为了具体实施,你需要根据 IoT 设备的具体要求和技术栈选择最合适的方案。同时,考虑到安全性、可扩展性和维护性等因素,确保所选的方法能够满足项目的长期发展需求。在 Spring Boot 中实现与物联网(IoT)设备的通信,通常涉及到选择合适的协议和库来处理特定类型的 IoT 通信。欢迎关注我的个人公众号:宁凌科技。

Pmyx_wyh的博客 967

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RabbitMQ交换机核心原理与Spring Boot实战:Direct/Topic/Fanout/Headers详解

消息队列作为异步通信和解耦的核心组件,在现代分布式系统中扮演着关键角色。其工作原理基于生产者-消费者模型,通过可靠的消息传递机制实现服务间的松耦合。RabbitMQ作为其中广泛应用的开源实现,其核心路由机制依赖于交换机。交换机根据类型和绑定规则,将消息精准路由到目标队列,这是实现复杂消息模式的技术基础。在工程实践中,结合Spring Boot框架,开发者可以高效集成并配置RabbitMQ。本文将深入解析Direct、Topic、Fanout和Headers四种核心交换机的工作原理,并通过Spring Boo

weixin_33991418的博客 378

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

基于Spring AI与本地大模型构建跨工具AI Agent工作流

AI Agent(智能体)是一种能够感知环境、自主规划并执行任务以达成目标的软件实体,其核心原理在于结合大语言模型的认知能力与外部工具的操控能力。在技术价值上,AI Agent能够打破应用间的数据孤岛,实现自动化与智能化的工作流编排,显著提升知识管理与信息处理效率。典型的应用场景包括文档自动处理、智能笔记关联、文献信息提取与网页内容结构化。本文探讨的“Innate”架构,正是利用Spring AI框架集成本地部署的大语言模型(如通过Ollama运行的模型),结合浏览器扩展与脚本工具,构建一个安全、隐私可控的

weixin_33836874的博客 404

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

RSocket 从入门到落地:两种微服务对比

✏️Pic by Alibaba Tech on Facebook技术实践的作用在于:除了用于构建业务,也是为了验证某项技术或框架是否值得大规模推广。这是《RSocke...

阿里巴巴中间件 9161

Nacos配置中心热更新实战:原理、实现与避坑指南

在微服务架构中,配置管理是核心基础能力之一。传统配置文件与代码强耦合的方式,使得任何配置变更都需要重启应用,严重影响运维效率和系统可用性。配置中心通过外部化、集中化管理配置,实现了配置与应用的解耦。其核心原理在于监听-通知-刷新机制,客户端通过长连接监听配置变更,服务器在配置更新后主动推送通知,触发客户端动态刷新。这项技术的核心价值在于支持运行时动态调整系统行为,实现业务参数、功能开关的秒级生效,极大提升了运维灵活性和故障响应速度。典型应用场景包括动态调整业务规则参数、实时切换功能开关、更新日志级别等。本文

weixin_33933118的博客 371

基于QClaw与XXL-JOB构建分布式生活自动化技能

分布式任务调度是微服务架构中的核心组件,用于解决多实例环境下定时任务的协调与执行问题。其原理是通过一个中心化的调度器统一管理任务触发,执行器节点注册并接收指令,确保同一任务在集群中仅被执行一次,从而保障了任务的准确性与数据一致性。这项技术对于构建高可用、可扩展的自动化系统具有重要价值,广泛应用于数据同步、报表生成、系统监控等场景。本文以开源生活自动化框架QClaw为例,深入解析如何利用XXL-JOB实现分布式定时任务,并演示如何开发、部署一个可复用的自动化技能(Skill),例如每日早安简报,将天气查询、新

weixin_34195546的博客 681

如何用Campus-imaotai实现i茅台自动预约:从零部署到智能抢购

还在为每天9点准时守在手机前抢购茅台而烦恼吗?Campus-imaotai是一款基于Java和Vue开发的i茅台app自动预约系统,通过智能定时任务和自动化流程,彻底解放你的双手。这个开源项目支持多账号管理、智能门店匹配、自动预约和结果推送,让茅台预约变得轻松简单,真正实现"设置一次,自动运行"的便捷操作。无论你是技术爱好者还是普通用户,只需简单配置就能享受全自动茅台预约的便利。 ## 为什么你

gitblog_01104的博客 464

基于SpringBoot项目实现Docker容器化部署

首先,需要选择一个基础镜像,通常是包含Java运行时环境的镜像,例如OpenJDK。可以从Docker Hub或其他镜像仓库中获取这些镜像。 接下来,需要在基础镜像上构建一个包含Spring Boot应用程序的镜像。这包括将应用程序的JAR文件、依赖项和配置文件添加到镜像中。

software_test010的博客 777
上一篇: 聊聊Spring里那个不打扰Controller就能统一改响应的“神器”
下一篇: 你的项目还在用MyBatis吗?或许这个框架更适合你
智_永无止境
博客等级 码龄10年 803粉丝 403原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智_永无止境

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值