springboot 项目监听多个端口

本文介绍了如何在Spring Boot应用中通过ApplicationConfig配置多个端口,包括设置服务器端口、自定义连接器并根据请求端口号返回不同响应。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 步骤:

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.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;
import java.util.List;

@Configuration
public class ApplicationConfig {

   @Value("${server.additionalPorts}")
   private String additionalPorts;

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

   private Connector[] additionalConnector() {
       if (this.additionalPorts==null) {   
           return null;
       }
       String[] ports = this.additionalPorts.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.valueOf(port));
           result.add(connector);
       }
       return result.toArray(new Connector[] {});
   }
}

3.启动类添加注解

@Import({ApplicationConfig.class})

4.启动项目,可监听多个端口

5.控制器根据端口号做响应设置

例:
import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/")
@RestController
public class PayController {

    //-----------------------测试----------------------------
    @RequestMapping("/a")
    public String a(HttpServletRequest request) {
        int port=request.getServerPort();
        if(port==8088) {
            return "b";
        }
        if(port==8089) {
            return "c";
        }
        if(port==8090) {
            return "d";
        }
        return "a";
    }
}

### 关于Cursor机器码的限制 在编程环境中,“cursor”通常指的是光标的定位和操作,而并非直接关联到低级的机器码层面。然而,在某些特定场景下,比如嵌入式开发或是操作系统内核编写时,确实会涉及到通过机器指令来控制硬件级别的光标。 对于机器码中的光标处理主要存在以下几个方面的局限: - **地址空间有限**:由于早期计算机体系结构的设计原因,用于表示屏幕坐标的寄存器位数较少,这使得能够表达的最大坐标范围受到严格限制[^1]。 - **效率问题**:频繁更新光标位置可能会导致性能下降,尤其是在资源受限设备上。每次移动都需要重新计算并刷新显示缓冲区的内容,增加了CPU负担[^2]。 - **兼容性挑战**:不同类型的终端或显示器可能采用不同的协议去解释相同的机器命令序列,这就造成了跨平台移植上的困难。 ```assembly ; 假设这是一个简单的汇编程序片段用来设置文本模式下的光标位置 mov ah, 02h ; 设置功能号为AH=02H (BIOS中断调用) mov bh, 00h ; 页面编号BH=0(默认页面) mov dh, row ; DH=row 行号 mov dl, col ; DL=col 列号 int 10h ; 执行视频服务INT 10H ``` 上述代码展示了如何利用BIOS中断服务来改变DOS环境下文本模式下的光标位置。需要注意的是这种做法依赖具体的硬件环境和支持情况,并不具备良好的通用性和可移植性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值