【发布时间】:2018-08-09 23:35:50
【问题描述】:
我正在尝试使用 Netflix OSS 来实现微服务架构。我想在 runtime 的 bootstrap.yml 文件中记录 server.port,以查看哪个实例正在为请求提供服务。
我正在使用 Java8。
重要的库版本是:
* spring-boot-starter-web-1.5.8
* spring-boot-starter-tomcat-1.5.8
* tomcat-embed-core-8.5.23
在stackoverflow上浏览后,我找到了this和this,但是这些解决方案都不起作用。
我的 bootstrap.yml 看起来像这样:
spring:
application:
name: some-service
server:
port: ${port:8088}
我尝试了以下代码:
@SpringBootApplication
@EnableEurekaClient
@SuppressWarnings("javadoc")
public class SomeService {
private static Logger logger = LoggerFactory.getLogger(SomeService .class);
@LocalServerPort
private static int randomServerPort;
@LocalManagementPort
private static int randomManagementPort;
@Autowired
private static Environment environment;
@Value("${server.port}")
// @Value("${local.server.port}")
private static int port;
public static void main(String[] args) {
SpringApplication.run(SomeService .class, args);
logger.info("randomServerPort : {}", randomServerPort);
logger.info("randomManagementPort : {}", randomManagementPort);
logger.info("server.port : {}", port);
logger.info("environment.getProperty(\"server.port\") : {}", environment.getProperty("server.port"));
}
对应的输出是:
randomServerPort : 0
randomManagementPort : 0
server.port : 0
java.lang.NullPointerException against environment.getProperty("server.port")
前三个日志语句记录 0,而最后一个则抛出 `NullPointerException*。
在运行时,端口在控制台的日志中打印为:
s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8088 (http)
我想在SomeService 类的main 方法中访问这个端口号。我该怎么做?
【问题讨论】:
标签: java spring spring-boot tomcat8