在两个不同端口上具有两个服务的 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.properties
或application.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.properties
或application.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 应用程序