我有一个Spring Boot Web应用程序,我想分成大约六个独立的应用程序。一个将在“ /
”下的端点处提供主页和登录名,另一个将声明子目录路径(“ /subsystem1
”,“ /subsystem2
”等)。我有一个非常清楚的想法,我如何使用JWT将身份验证/授权从登录应用程序传递给其他应用程序。
这样做的主要原因是可以在不关闭其他子系统的情况下修改或更新每个子系统。从组织上来说,当只更改一个子系统时,我们不必对整个应用程序进行质量检查。
是否可以将多个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路径重新映射到单独的应用程序。
答案 0 :(得分:0)
在一个端口上侦听的应用程序不能超过一个。内核如何将软件包发送到哪个应用程序?
您可以在8080上运行诸如nginx之类的http服务器,并在不同的端口中运行每个应用程序,然后根据URL将请求代理到所需的应用程序。