【问题标题】:Accessing server port @Value("${local.server.port}") not working [duplicate]访问服务器端口 @Value("${local.server.port}") 不起作用[重复]
【发布时间】:2018-04-03 05:30:36
【问题描述】:

我目前正在开发一个 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);
    }
}

【问题讨论】:

  • 当然 ${server.port} 有效,但返回 0
  • 只是问显而易见的,以防万一...您的 application.properties 是否可见(在 src/main/resources 中),即如果您删除上面的此端口检查并让应用程序启动,它是否正在启动在随机端口上?
  • 我对spring boot不熟悉,但我刚刚阅读了文档中的相关部分:docs.spring.io/spring-boot/docs/current/reference/html/…..我认为您也应该阅读注释。它说“只有在容器初始化后才设置该值”。我认为您应该按照文档从“ApplicationListener 获取本地端口
  • @AidanMoriarty 是的,它在 src/main/resources 中。我可以确认它正在成功创建随机端口。
  • @Surely 谢谢你,我会看一下这个文档。但它提到不要尝试将端口注入常规应用程序 (${local.server.port})。至少这可以解释为什么它对我来说失败了

标签: java spring spring-boot spring-cloud


【解决方案1】:

正如问题评论部分和@Surely 链接的参考文档中所述,@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;
    }
}

【讨论】:

  • 重复stackoverflow.com/a/30312990/5627829 上面提供的@surely 的答案并不能真正算作您解决它。
  • 如果遇到这种情况,我深表歉意。我已经相应地更新了答案。我的意图只是为将来偶然发现此线程的任何人留下答案。
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 2023-03-09
  • 1970-01-01
  • 2012-05-05
  • 1970-01-01
相关资源
最近更新 更多