java -D参数设置系统属性无效
我们都知道如何在Java
中获取系统属性:
1
|
System.getProperty(ESClientConstance.HTTP_PROXY_HOST); |
这样可以获取操作系统默认的一些属性值。
如果我们需要自定义一些系统属性,那么这样定义:
1
|
-Dhttp_proxy_host= 192.19 . 19.19 |
但是要注意下面这种情况,会导致java -D
失效,进而导致System.getProperty
获取不到属性值。
比如我的这样一个以java -jar
方式启动的脚本:
1
2
3
4
5
6
|
nohup java -agentlib:jdwp=transport=dt_socket,address= 39502 ,server=y,suspend=n \ -jar /opt/spider-es-cli/es-client- 1.0 . 0 .jar \ -Dhttp_proxy_host= 100.129 . 18.11 \ -Dhttp_proxy_port= 3128 \ --spring.profiles.active=prod \ --server.port= 9502 >/dev/ null 2 >& 1 & |
注意:-D
错误地配置在了-jar
之后。
处理方式是将-D
正确地配置在-jar
之前即可。
同样地,对java 类名
方式启动也一样,注意要将-D
配置在类名之前。
java程序启动参数 -D详解
java程序启动参数 -D是用来做什么的呢?
去查询了一下官方解释:
Set a system property value. If value is a string that contains spaces, you must enclose the string in double quotes:
1
|
java -Dfoo= "some string" SomeClass |
也就是说-D是用来在启动一个java程序时设置系统属性值的。如果该值是一个字符串且包含空格,那么需要包在一对双引号中。
何为系统属性值呢?也就是在System类中通过getProperties()得到的一串系统属性。
下面我们来写个测试方法就知道了
1
2
3
4
5
6
7
8
9
10
|
/** * @author lmfeng * @date 2018/05/30 */ public class SystemProperty { public static void main(String[] args){ System.out.print(System.getProperty( "dubbo.token" )); } } |
在运行改程序时加上JVM参数-Ddubbo.token=“666” 或者 -Ddubbo.token=666,那么运行之后你可以看到控制台输出了666!
一点值得注意的是,需要设置的是JVM参数而不是program参数,注意看下图
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。