有 Java 编程相关的问题?

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

java访问服务器端口@值(${local.server.port})不工作

我目前正在使用Springboot应用程序,需要访问当前的服务器端口。由于我在application.properties中定义了server.port = 0,因此端口被随机分配

我已经看到多个关于这一点的帖子,它们都指向添加:

@Value("${local.server.port}")
private int port;

然而,启动应用程序会提示我Could not resolve placeholder 'local.server.port' in string value "${local.server.port}"

澄清一下,我不是在设置测试。我使用的是Springboot 1.5.7。我错过什么了吗?我尝试运行以下简单示例:

@SpringBootApplication
public class Main {

    @Value("${local.server.port}")
    private int port;

    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }

    @PostConstruct
    public void printsomething() {
        System.out.println("PORT " + this.port);
    }
}

共 (1) 个答案

  1. # 1 楼答案

    如问题注释部分所述,并参考了由@Survey链接的文档,@Value("${local.server.port}")在运行应用程序时不能使用。解决方案是执行以下操作:

    @Component
    public class PortListener implements ApplicationListener<EmbeddedServletContainerInitializedEvent> {
    
        private static int port;
    
        @Override
        public void onApplicationEvent(final EmbeddedServletContainerInitializedEvent event) {
            port = event.getEmbeddedServletContainer().getPort();
        }
    
        public static int getPort() {
            return port;
        }
    }