java -D參數設置系統屬性無效問題及解決
java -D參數設置系統屬性無效
我們都知道如何在Java
中獲取系統屬性:
System.getProperty(ESClientConstance.HTTP_PROXY_HOST);
這樣可以獲取操作系統默認的一些屬性值。
如果我們需要自定義一些系統屬性,那麼這樣定義:
-Dhttp_proxy_host=192.19.19.19
但是要註意下面這種情況,會導致java -D
失效,進而導致System.getProperty
獲取不到屬性值。
比如我的這樣一個以java -jar
方式啟動的腳本:
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:
java -Dfoo="some string" SomeClass
也就是說-D是用來在啟動一個java程序時設置系統屬性值的。如果該值是一個字符串且包含空格,那麼需要包在一對雙引號中。
何為系統屬性值呢?也就是在System類中通過getProperties()得到的一串系統屬性。
下面我們來寫個測試方法就知道瞭
/** * @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參數,註意看下圖
總結
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Java系統變量參數獲取設置System.getProperties()的方法
- java面試常見模式問題—代理模式
- java獲取和設置系統變量問題(環境變量)
- Java通過百度API實現圖片車牌號識別
- SpringBoot超詳細講解@Value註解