【发布时间】: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