java - 从部署到已运行的 Tomcat 8 实例的 Spring Boot WAR 文件中获取 Tomcat 运行的端口

标签 java spring tomcat spring-boot

我有一个 Spring Boot 应用程序,其中应用程序的每个实例都是集群中的一个节点,每个节点都需要能够与集群中的其他节点通信以共享信息。出于性能原因,这不能通过 HTTP 发生,尽管集群中每个节点的初始联系是通过 HTTP 调用。

要进行初始 HTTP 调用,实例需要能够获取其他实例正在运行的端口,以便它们可以相互注册。这意味着每个节点都需要知道其 Tomcat 实例正在使用哪个端口。

如果我部署一个包含嵌入式 Tomcat 实例的 WAR 文件,这会很好地工作。我为 EmbeddedServletContainerInitializedEvent 注册了一个 ApplicationListener,并从 EmbbedServletContainer 获取端口。

当我将 WAR 文件部署到一个已经运行的 Tomcat 实例时,问题就来了。我无法找到确定 Tomcat 实例在哪个端口上运行的方法,并且上述事件不再触发,因为 Tomcat 实例已经在运行。

有人知道如何找出正在使用的端口吗?

最佳答案

很简单:你不能。 Web 应用程序不知道它在其中运行的容器。事实上,Tomcat 可以有多个连接器并在多个端口上监听...

关于java - 从部署到已运行的 Tomcat 8 实例的 Spring Boot WAR 文件中获取 Tomcat 运行的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32638192/

相关文章:

java - Java 服务器中的执行程序池

java - 选择在运行时 spring 注入(inject)哪个实现

spring - 如何开始使用服务器端 - Java - Spring Framework

java runtime.exec() 不能在 tomcat 上运行

javascript - 如何在内容加载后加载 HTML

java - Spring 批处理 : not able to access jobexecutionConext in flatfileitemwriter

java - 如何配置 Apache 将子域重定向到 Tomcat 应用程序

java - 如何防止 Spring Boot Tomcat Jackson 中 flushBuffer 的并发锁定?

java - 使用了错误的 JDBC 驱动程序?

java - 由于内部错误 : PASSWORD_VERIFIER challenge encountered not at the start of authentication flow,身份验证失败