From 50d1a3ff98616c813d359dd94cf7aa513b0a410a Mon Sep 17 00:00:00 2001 From: pizihao <2335715300@qq.com> Date: Tue, 29 Nov 2022 16:48:08 +0800 Subject: [PATCH] fix : The port is obtained from the configuration file first. If the value is null, the default value is 8080. If the value is 0, it means that the random value is defined and the port is obtained using webServer --- .../adapter/web/WebIpAndPortHolder.java | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebIpAndPortHolder.java b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebIpAndPortHolder.java index 01d85d22..3c4861d6 100644 --- a/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebIpAndPortHolder.java +++ b/hippo4j-adapter/hippo4j-adapter-web/src/main/java/cn/hippo4j/adapter/web/WebIpAndPortHolder.java @@ -24,6 +24,7 @@ import cn.hippo4j.common.toolkit.StringUtil; import cn.hippo4j.core.toolkit.inet.InetUtils; import lombok.NoArgsConstructor; import org.springframework.boot.web.server.WebServer; +import org.springframework.core.env.Environment; import java.util.Arrays; import java.util.Objects; @@ -54,6 +55,16 @@ public class WebIpAndPortHolder { protected static final String SEPARATOR = ","; + /** + * get port for Environment + */ + protected static final String PORT_KEY = "server.port"; + + /** + * if port is null, use this + */ + protected static final int PORT = 8080; + protected static void initIpAndPort() { if (!supportVersion) { return; @@ -66,12 +77,20 @@ public class WebIpAndPortHolder { InetUtils.HostInfo loopBackHostInfo = inetUtils.findFirstNonLoopBackHostInfo(); Assert.notNull(loopBackHostInfo, "Unable to get the application IP address"); String ip = loopBackHostInfo.getIpAddress(); - WebThreadPoolHandlerChoose webThreadPoolHandlerChoose = ApplicationContextHolder.getBean(WebThreadPoolHandlerChoose.class); - WebThreadPoolService webThreadPoolService = webThreadPoolHandlerChoose.choose(); - // When get the port at startup, can get the message: "port xxx was already in use" or use two ports - WebServer webServer = webThreadPoolService.getWebServer(); - String port = String.valueOf(webServer.getPort()); - return new WebIpAndPortInfo(ip, port); + + Environment environment = ApplicationContextHolder.getBean(Environment.class); + Integer port = environment.getProperty(PORT_KEY, Integer.TYPE); + port = Objects.isNull(port) ? PORT : port; + + if (port == 0) { + WebThreadPoolHandlerChoose webThreadPoolHandlerChoose = ApplicationContextHolder.getBean(WebThreadPoolHandlerChoose.class); + WebThreadPoolService webThreadPoolService = webThreadPoolHandlerChoose.choose(); + // When get the port at startup, can get the message: "port xxx was already in use" or use two ports + WebServer webServer = webThreadPoolService.getWebServer(); + port = webServer.getPort(); + } + + return new WebIpAndPortInfo(ip, String.valueOf(port)); } /**