记录 常见的参数的设置获取,以及常用之处
命令行参数
最常见的一种,main方法中获得该参数值
public class MyPramTest{
public static void main(String[] args) {
// - 命令行参数
System.out.println("命令行传递的参数1:" + args[0]);
System.out.println("命令行传递的参数2:" + args[1]);
}
}
javac MyPramTest.java
java MyPramTest argxxxx-1 argxxxx-2
控制台输出:
命令行传递的参数1:argxxxx-1
命令行传递的参数2:argxxxx-2
系统属性参数
这种参数一般中间件中用的多,例如 dubbo中,-Ddubbo.application.logger=slf4j
一般的输入形式是 java -Dxxx=cccc -Dmmm=“abc=dd” , dos命令行下 java -D 可以看到具体解释:
-D是用来在启动一个java程序时设置系统属性值的。如果该值是一个字符串且包含空格或特殊字符,那么需要包在一对双引号中,采用 System.getProperty 获得键值。
public class MyPramTest2 {
public static void main(String[] args) {
// - 命令行参数
System.out.println("系统属性参数1:" + System.getProperty("prop1"));
System.out.println("系统属性参数2:" + System.getProperty("prop2"));
}
}
javac MyPramTest2.java
java MyPramTest2 -Dprop1=argxxxx-1 -Dprop2="argx xxx-2"
当然也可以在spring应用中直接输入系统属性参数 例如:
System.setProperty("dubbo.application.logger", "slf4j");
控制台输出:
系统属性参数1:argxxxx-1
系统属性参数2:argx xxx-2
另外补充一点,主要是springBoot 启动时候:
java -jar -Xms2048M xxxxxx.jar --server.port=8088 --spring.profiles.active=test
“-” 和 “- -” (单横杠和双横杠)的区别:
单横杠是java 命令行特有用法,表示可选参数
双横杠这里是springboot的特定写法,实际上可以看做是 “–server.port=8088” 作为一个整体参数传入java中的 args[] 命令行参数数组中
可以参考这篇博客 here
环境变量
这个比较好用,设置系统环境变量,采用System.getenv方法从中获得环境变量值
public class MyPramTest3 {
public static void main(String[] args) {
// - 命令行参数
System.out.println("环境变量参数1:" + System.getenv("env1"));
System.out.println("环境变量参数2:" + System.getenv("env2"));
}
}
#假设 Linux 系统中, windows 中采用 set key=value 方式进行环境变量设置, echo %key% 方式查看
export env1=myenv1111
export env2=myenv2222
javac MyPramTest3 .java
java MyPramTest3
控制台输出:
环境变量参数1:myenv1111
环境变量参数2:myenv2222
yml文件中的取值
spring-boot yml文件中的取值顺序,设置了本文件中的变量值,且同时指定系统属性参数和环境变量,请问最后端口号是多少?
server:
port: ${APP_PORT:8081}
APP_PORT: 8082
springboot yml中变量赋值的优先级是:
- 优先从系统属性参数中取值
- 然后环境变量取值
- 最后从本文件中取
- 如果以上都取值不到,则采用默认值 8081,如果默认值都没有设置则 报错
上面的测试 最终程序启动的端口是 8087