Springboot、Spring cloud监听多个端口

本文介绍如何使用 Spring Boot 在多个端口上运行应用。通过在 application.yml 中配置 additionalPorts 并创建 TomcatUtil 类,可以实现服务在主端口外的其他端口上监听。针对 Spring Boot 1.x 和 2.x 提供了不同的实现方法。

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

步骤1:

application.yml配置文件中添加需要监听的端口如下所示additionalPorts为该服务添加的其他端口

server:
  port: 8088
  additionalPorts: 8089,8087

步骤2:

新建TomcatUtil.java类,详细代码如下

Springboot 1X

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

package com.demo;

import org.apache.catalina.connector.Connector;

import org.apache.commons.lang3.StringUtils;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;

import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;

import java.util.List;

@Configuration

public class TomcatUtil {

    @Value("${server.additionalPorts}")

    private String additionalPorts;

    @Bean

    public EmbeddedServletContainerFactory servletContainer() {

        TomcatEmbeddedServletContainerFactory tomcat =new TomcatEmbeddedServletContainerFactory();

        Connector[] additionalConnectors =this.additionalConnector();

        if (additionalConnectors !=null && additionalConnectors.length >0) {

            tomcat.addAdditionalTomcatConnectors(additionalConnectors);

        }

        return tomcat;

    }

    private Connector[] additionalConnector() {

        if (StringUtils.isBlank(this.additionalPorts)) {

            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[] {});

    }

}

  

Springboot 2X

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

package com.demo;

import org.apache.catalina.connector.Connector;

import org.apache.commons.lang3.StringUtils;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import java.util.ArrayList;

import java.util.List;

@Configuration

public class TomcatUtil {

    @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 (StringUtils.isBlank(this.additionalPorts)) {

            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({TomcatUtil.class})

### Spring BootSpring Cloud集成实现微服务架构 #### 使用依赖管理简化项目配置 为了使Spring Boot应用程序能够利用Spring Cloud的功能,需要在项目的`pom.xml`文件中引入必要的依赖项。通过Maven或Gradle这样的构建工具,可以轻松地管理和更新所需的库版本。 对于Maven项目来说,应该添加如下所示的依赖到`<dependencies>`标签内: ```xml <!-- 引入spring-cloud-starter-netflix-eureka-client --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- 添加其他所需组件, 如config server/client等 --> ``` 这一步骤确保了应用程序具备发现和服务注册的能力[^1]。 #### 启用Eureka客户端功能 为了让各个微服务实例之间相互识别并通信,在主启动类上加上`@EnableDiscoveryClient`注解即可开启此特性。这样做之后,所有的微服务都会自动向Eureka Server报告自己的状态,并可以从那里获取其他服务的信息。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 上述代码片段展示了如何在一个标准的Spring Boot应用里激活服务发现机制[^2]。 #### 配置服务中心(Eureka Server) 创建一个新的Spring Boot模块作为Eureka Server端点,同样在其入口处声明相应的启用标记——即`@EnableEurekaServer`。此外还需调整application.yml中的设置以适应单机或多节点集群环境下的运行需求。 ```yaml server: port: 8761 eureka: client: register-with-eureka: false fetch-registry: false instance: hostname: localhost logging: level: com.netflix.eureka: WARN ``` 这段YAML格式的配置指定了服务器监听端口、禁用了自我注册行为以及设置了主机名属性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值