You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Quarkus动态端口模式下应用实际监听的HTTP端口

获取Quarkus动态端口的真实运行端口

当你设置quarkus.http.port=0让Quarkus使用随机动态端口时,@ConfigProperty(name = "quarkus.http.port")只会返回配置文件里设置的0——因为这个配置值是启动前的静态配置,不会自动同步启动后系统分配的真实端口。要获取真实端口,可以用以下两种常用方法:

方法一:注入VertxHttpServer直接获取

Quarkus底层用Vert.x处理HTTP请求,你可以注入VertxHttpServer实例,通过它获取已启动的服务器实例,进而拿到真实端口:

import io.quarkus.vertx.http.runtime.VertxHttpServer;
import jakarta.inject.Inject;
import jakarta.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class PortResolver {

    @Inject
    VertxHttpServer vertxHttpServer;

    public int getRealPort() {
        // actualPort()方法返回系统分配的真实端口
        return vertxHttpServer.getServer().actualPort();
    }
}

方法二:监听应用启动事件获取

如果需要在应用启动完成后立即获取端口,可以监听StartupEvent,此时服务器已经完成端口分配:

import io.quarkus.runtime.StartupEvent;
import io.quarkus.vertx.http.runtime.VertxHttpServer;
import jakarta.enterprise.event.Observes;
import jakarta.inject.Inject;

public class PortInitializer {

    @Inject
    VertxHttpServer vertxHttpServer;

    void onAppStartup(@Observes StartupEvent event) {
        int realPort = vertxHttpServer.getServer().actualPort();
        // 这里可以做端口记录、后续业务逻辑处理等操作
        System.out.println("当前应用真实运行端口: " + realPort);
    }
}

注意:这两种方法都需要在应用启动完成后调用,过早调用(比如在@PostConstruct方法里)可能会拿到无效值,因为此时服务器还未完成端口绑定。

内容的提问来源于stack exchange,提问作者matteo baudino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:25:49