【发布时间】:2020-05-17 10:40:32
【问题描述】:
我有一个 Spring Boot Web 应用程序,我想将其拆分为大约六个独立的应用程序;一个将提供主页并在“/”下的端点登录,其他每个将声明一个子目录路径(“/subsystem1”、“/subsystem2”等)。我非常清楚如何使用 JWT 将身份验证/授权从登录应用程序传递给其他应用程序。
这样做的主要原因是每个子系统都可以在不关闭其他子系统的情况下进行修改或更新。并且在组织上,因此当仅更改一个子系统时,我们不必将整个应用程序置于 QA 流程中。
是否可以设置多个 Spring Boot 实例同时在同一服务器和同一端口上运行,其端点具有不同的路径/目录?如何?
我找不到任何重复的问题,但这里有两个相关的问题可能会提供线索:
从Is there a standard way to customize the deploy path in Spring Boot? 我了解到我可以设置应用程序属性
server.servlet.context-path为整个应用程序添加一个子目录名称(例如“/subsystem1”)。但是我仍然不能同时运行两个应用程序,即使它们都声称不同的子目录。 Spring Boot 报告“Web 服务器启动失败。端口 8080 已在使用中。”有 Multiple Spring-boot applications running on one Tomcat ,但我更喜欢将独立的 Spring 应用程序与它们的嵌入式 Tomcat 实例一起使用,而不是不太推荐的 WAR 打包和部署到外部 Tomcat 容器。
-
这个看起来很有希望——Deploying Multiple Spring Boot Web Applications in Single Server——但答案集中在独立或 Tomcat 容器部署是否更好,并没有涉及“操作方法”问题。
可接受的答案:
如果像 ekalin 建议的那样,让多个 Spring Boot 应用程序监听同一个端口是不可能的,这里有一些我头脑风暴的想法(但不知道如何实现) :
也许实例可能在不同的端口上运行,但主应用程序(带有登录页面的应用程序)可能会以某种方式“转发”或重定向到其他应用程序,从而隐藏其真实 URL?例如。 “localhost:8080/subsystem1”将是“localhost:8081/”的别名。
也许每个应用程序都可以有自己的 Docker 容器,所有这些容器都在共享的 Docker 网络中运行,并且我们以某种方式使用 Docker 将每个 URL 路径映射到正确的应用程序?可以用 docker-compose 设置吗?
我们设置了某种代理服务器,将 URL 路径重新映射到单独的应用程序。
【问题讨论】: