package com.farriver.bwf.web.initializer; import com.alibaba.cloud.nacos.registry.NacosAutoServiceRegistration; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; import javax.management.MBeanServer; import javax.management.ObjectName; import javax.management.Query; import java.lang.management.ManagementFactory; import java.util.Set; @Component @Slf4j public class NacosRegisterOnWar implements ApplicationRunner { @Autowired(required = false) private NacosAutoServiceRegistration registration; @Value("${server.port}") Integer port; @Override public void run(ApplicationArguments args) throws Exception { if (registration != null && port != null) { Integer tomcatPort = port; try { tomcatPort = Integer.valueOf(getTomcatPort()); registration.setPort(tomcatPort); } catch (Exception e) { log.warn("获取外部Tomcat端口异常:", e); } registration.start(); } } /** * 获取外部tomcat端口 */ public String getTomcatPort() throws Exception { MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer(); Set objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"), Query.match(Query.attr("protocol"), Query.value("HTTP/1.1"))); if (!objectNames.isEmpty()) return objectNames.iterator().next().getKeyProperty("port"); return "8080"; } }