java -D參數(shù)設置系統(tǒng)屬性無效問題及解決
java -D參數(shù)設置系統(tǒng)屬性無效
我們都知道如何在Java中獲取系統(tǒng)屬性:
System.getProperty(ESClientConstance.HTTP_PROXY_HOST);
這樣可以獲取操作系統(tǒng)默認的一些屬性值。
如果我們需要自定義一些系統(tǒng)屬性,那么這樣定義:
-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程序啟動參數(shù) -D詳解
java程序啟動參數(shù) -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程序時設置系統(tǒng)屬性值的。如果該值是一個字符串且包含空格,那么需要包在一對雙引號中。
何為系統(tǒng)屬性值呢?也就是在System類中通過getProperties()得到的一串系統(tǒng)屬性。
下面我們來寫個測試方法就知道了
/**
* @author lmfeng
* @date 2018/05/30
*/
public class SystemProperty {
public static void main(String[] args){
System.out.print(System.getProperty("dubbo.token"));
}
}
在運行改程序時加上JVM參數(shù)-Ddubbo.token=“666” 或者 -Ddubbo.token=666,那么運行之后你可以看到控制臺輸出了666!
一點值得注意的是,需要設置的是JVM參數(shù)而不是program參數(shù),注意看下圖

總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
關于Java實體類Serializable序列化接口的作用和必要性解析
序列化是將對象狀態(tài)轉化為可保持或者傳輸?shù)母袷竭^程,與序列化相反的是反序列化,完成序列化和反序列化,可以存儲或傳輸數(shù)據(jù),一般情況下,在定義實體類時會使用Serializable,需要的朋友可以參考下2023-05-05
jackson在springboot中的使用方式-自定義參數(shù)轉換器
這篇文章主要介紹了jackson在springboot中的使用方式-自定義參數(shù)轉換器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10

