在两个不同端口上具有两个服务的 Spring Boot 应用程序

Posted

技术标签:

【中文标题】在两个不同端口上具有两个服务的 Spring Boot 应用程序【英文标题】:Spring boot application with two services on two different ports 【发布时间】:2019-07-29 04:32:32 【问题描述】:

我有一个带有两个服务的 Spring Boot 应用程序,但我需要在端口 8080 上运行一个,另一个在 8081 上运行。现在我正在使用 sts(Spring 工具套件)进行开发,并使用“运行方式”选项运行该应用程序spring boot app”,所以我不知道在哪里更改服务器配置。有人可以帮助我吗?

【问题讨论】:

检查这个重复的post你可以通过application.properties来做 我已经看到了,但是我需要将一个服务放在 8080 中,另一个在 8081 中使用相同的应用程序 How to configure port for a Spring Boot application的可能重复 这里讨论:***.com/questions/36357135/… 【参考方案1】:

你不能在两个不同的端口在同一个spring boot应用下运行两个不同的服务。如果您愿意,可以将一项服务移动到另一个 Spring Boot 应用程序。 但是两种服务的端口号不同。

【讨论】:

【参考方案2】:

你可以在 application.properties 或 application.yml 中写下一行

server.port=8080

【讨论】:

【参考方案3】:

您可以配置 SprintBoot 支持两个端口。常用的配置方法是使用application.propertiesapplication.yaml 作为@Madhu Bhat 答案。在 SprintBoot 中配置另一个端口代码如下:

创建一个连接器

        int port = Integer.parseInt(probePort);
        Connector httpConnector = new Connector(HTTP_PROTOCOL);
        httpConnector.setPort(port);
        Http11NioProtocol handler = (Http11NioProtocol) httpConnector.getProtocolHandler();
        handler.setMaxThreads(10);
        handler.setMinSpareThreads(4);
        //handler.setAddress(InetAddress.getLocalHost());
        handler.setAddress(StringTool.getInetAddress());
        return httpConnector;

配置连接器

((TomcatEmbeddedServletContainerFactory) container).addAdditionalTomcatConnectors(connector);

【讨论】:

但这需要在两个不同的端口上运行两个不同的应用程序吗?【参考方案4】:

可以在您使用的application.propertiesapplication.yaml 配置文件中定义端口。

application.properties文件中,定义如下:

server.port=8090

或者,如果您使用的是 application.yaml 配置,请将其定义如下:

server:
    port: 8090

【讨论】:

那么,如果我需要访问两个不同的端口,我需要在两个不同端口上的两台服务器上运行应用程序? @AlessioPascucci 如果您必须在不同的端口上有两个服务,您需要将它作为两个不同的应用程序运行,每个应用程序都有自己不同的端口。【参考方案5】:

如果您使用 Docker(最常见的解决方案),您可以将端口或其完整地址添加为环境变量

docker-compose.yml 文件如下:

application1:
    image: 'application1:latest'
    build:
      context: ./
    container_name: application
    environment:
      - HOST-APP2=localhost:8082
    ports:
      - 8091:8080

application2:
    image: 'application2:latest'
    build:
      context: ./
    container_name: application
    environment:
      - HOST-APP1=localhost:8081
    ports:
      - 8092:8080

或在构建容器时直接在 Dockerfile 中

在这里查看:https://vsupalov.com/docker-arg-env-variable-guide/ 这是一篇好文章

【讨论】:

【参考方案6】:

当然。您可以在 spring boot 项目的 application.properties 文件中通过为每个服务设置 server.port=number 来完成。

【讨论】:

以上是关于在两个不同端口上具有两个服务的 Spring Boot 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Nginx 位置为在不同端口上运行的两个后端应用程序提供服务?

在具有不同端口的单个 EC2 上运行两个不同的 Web 应用程序

如何让Javamelody使用不同的端口(Spring Boot+暴露的两个HTTP端口)

侦听两个不同端口的 TCP 服务器

在两个不同的端口上运行 Tomcat 服务器

Spring Cloud Eureka Netflix zuul 过滤器