在我们的环境中,服务器侦听的端口始终由命令行参数指定:
java -jar myweb.jar --server.port=1024
。
我们如何获得这个价值?在我的AppSiteController.java
中,我尝试使用:
@Value("${server.port}")
private static String serverPort;
public static void main(String[] args) {
System.out.println(serverPort);
SpringApplication.run(AppSiteController.class, args);
}
在命令行上正确指定该值时,它将返回null。
谢谢。
答案 0 :(得分:1)
将其作为系统参数传递给jvm
java -Dserver.port=8080 -jar spring-boot.jar
所有java系统参数都已添加到spring环境中
答案 1 :(得分:0)
对于Spring Boot 2.x,您可以覆盖如下系统属性:
mvn spring-boot:run -Dspring-boot.run.arguments=--server.port=8085
默认情况下,Spring Boot将命令行参数转换为属性,并将其添加为环境变量。
您可以通过以下方式从应用程序的主方法访问命令行参数:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
for(String arg:args) {
System.out.println(arg);
}
SpringApplication.run(Application.class, args);
}
}
这将打印我们从命令行传递给应用程序的参数。
答案 2 :(得分:0)
而不是使用
@Value("${server.port}")
private static String serverPort;
考虑在springboot应用程序中使用以下内容:
@Bean
public String value(@Value("#{server.port}")String value){
return value;
}
然后将值访问为
SpringApplication.run(AppSiteController.class, args).getBean("value");
并传递命令行
-Dserver.port=...
答案 3 :(得分:0)
经过大量研究,我发现这是因为Spring Boot无法将值注入静态变量。解决方案在这里:
此代码:
@Value("${server.port}")
private static String serverPort;
应该是这样
private static String serverPort;
@Value("${server.port}")
public void setPort(String value) {
serverPort = value;
}