java -D參數(shù)設(shè)置系統(tǒng)屬性無效問題及解決
java -D參數(shù)設(shè)置系統(tǒng)屬性無效
我們都知道如何在Java
中獲取系統(tǒng)屬性:
System.getProperty(ESClientConstance.HTTP_PROXY_HOST);
這樣可以獲取操作系統(tǒng)默認(rèn)的一些屬性值。
如果我們需要自定義一些系統(tǒng)屬性,那么這樣定義:
-Dhttp_proxy_host=192.19.19.19
但是要注意下面這種情況,會導(dǎo)致java -D
失效,進(jìn)而導(dǎo)致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程序時設(shè)置系統(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!
一點值得注意的是,需要設(shè)置的是JVM參數(shù)而不是program參數(shù),注意看下圖
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于Java實體類Serializable序列化接口的作用和必要性解析
序列化是將對象狀態(tài)轉(zhuǎn)化為可保持或者傳輸?shù)母袷竭^程,與序列化相反的是反序列化,完成序列化和反序列化,可以存儲或傳輸數(shù)據(jù),一般情況下,在定義實體類時會使用Serializable,需要的朋友可以參考下2023-05-05jackson在springboot中的使用方式-自定義參數(shù)轉(zhuǎn)換器
這篇文章主要介紹了jackson在springboot中的使用方式-自定義參數(shù)轉(zhuǎn)換器,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10