有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在SpringWebFlux中如何在运行时获得服务器端口?

我有一个带有Spring Boot 2.3.5版的Spring Webflux应用程序

如何在运行时获得运行Netty容器的服务器端口?(不在测试中)

注意:如果配置中没有指定端口,nor@Value("${server.port}")nor@Value("${local.server.port}")都不工作


共 (1) 个答案

  1. # 1 楼答案

    我发现的一种方法是从org.springframework.boot.web.embedded.netty.NettyWebServer#start开始,看起来像是某个事件的监听器:

    @Component
    @Slf4j
    public class ServerStartListener implements ApplicationListener<WebServerInitializedEvent> {
    
        @Override
        public void onApplicationEvent(WebServerInitializedEvent event) {
            // This is to exclude management port
            if (!"management".equals(event.getApplicationContext().getServerNamespace())) {
                log.info("Application started on port {}", event.getWebServer().getPort());
            }
        }
    }
    

    然而,我觉得这不是很优雅,不知道是否有更好的方法