在前邊分享自定義springboot的配置檔案的時候,提到了JVM變數和系統環境變數的配置,今天想對這塊的內容做個梳理,
1、什麼是JVM變數、系統環境變數、程式變數;
2、怎麼使用這些變數;
3、這些變數如何起作用的;
一、認識這些這些變數
1.1、JVM變數
所謂的JVM變數和平時見到的不太一樣,比如-Xmx1024m這樣的,這裡說的JVM變數更確切的說是java命令中的一個選項,如,檢視java命令的幫助,
我們前邊在idea中進行配置的時候,使用的也是“-D”這個選項,在服務啟動的時候會設定一個key-value的屬性。並且從上面的註釋也可以看到對“-D”的解釋是“設定系統屬性”,當然設定了系統屬性就要獲取系統屬性,後面會說到如何獲取系統屬性。類似“-D”這樣的選項還有這些常見的:java -classpath、java -version,還有下面的java -javaagent:
1.2、系統環境變數
所謂系統環境變數,更多的理解為某個服務的全域性的環境變數,供這個服務中的所有元件來使用,
1.3、程式變數
所謂程式變數指的是main方法中的引數,我們經常寫的main方法如下,
@SpringBootApplication
public class BootServer {
public static void main(String[] args) {
SpringApplication.run(BootServer.class);
}
}
我們知道main方法是有返回值的,而且返回值是固定的,是字串陣列,只不過在平時我們執行main方法的時候很少會傳參。這裡說的程式變數就是說在springboot啟動的時候給啟動類中的main方法傳值。對映到idea中如下,
在上面的“Program arguments”中便可以配置程式變數,在執行的時候傳入main方法的引數中,可以在main方法中使用。
二、怎麼使用這些變數
上面說到什麼是JVM變數、環境變數、程式變數,下面需要看下如何使用這些變數。
2.1、JVM變數
其實在前面的文章中已經使用了JVM變數,對應到idea中就是在下面的位置進行配置即可,今天先不重複之前的配置,順便配置一個,需要注意一點這裡的配置除了JVM已經定義好的,其他的自定義配置請使用前面說到的“-D”的形式,多個配置使用空格隔開
上面配置好了,要怎麼使用那,簡單起見我這裡就在BootServer中使用了,其實這裡的配置可以在任何一個類中使用,看下下面的用法就明白了,
@SpringBootApplication
public class BootServer {
public static void main(String[] args) {
//獲取vm引數
String value=System.getProperty("customer.value");
String key=System.getProperty("customer.key");
System.out.println("value:"+value+",key:"+key);
SpringApplication.run(BootServer.class);
}
}
啟動時的日誌如下,
可以看到列印出來了配置的值。獲取JVM變數的方式很簡單,就是使用“System.getProperty()”方法即可,所以我說在每個類中都可以獲取,也就是說這個引數對整個服務都是起作用的。
在idea啟動的時候第一行都會列印下面的一句話,不知道大家注意過沒用,而且還有三個點,你點開過沒有,
沒用點開的小夥伴,你肯定錯過了一個億,今天我們點開看下,
其實這裡執行的就是“java -jar ”這樣的命令,只不過加了引數,而且可以看到加了“-D”,我們加的JVM變數就是以這樣的形式傳到程式裡的。
2.2、環境變數
環境變數的配置,在idea中是下面這樣的配置,
那麼在程式中是怎麼獲取這裡的配置吶,
@SpringBootApplication
public class BootServer {
public static void main(String[] args) {
//獲取vm引數
String value=System.getProperty("customer.value");
String key=System.getProperty("customer.key");
System.out.println("value:"+value+",key:"+key);
//獲取環境變數
String templateValue=System.getenv("template");
System.out.println("環境變數:"+templateValue);
SpringApplication.run(BootServer.class);
}
}
使用方式也很簡單,使用“System.getenv()”方法即可,而且在程式的每個類中都可以使用,
2.3、程式變數
好了,最後來看下程式變數是如何使用的,其配置方式也很簡單,
在idea中“Program arguments”中配置程式變數,多個值使用“空格”分隔即可,在程式中獲取配置的程式變數也很簡單,這裡需要注意這個變數只能在含有main方法的類中使用。
@SpringBootApplication
public class BootServer {
public static void main(String[] args) {
//獲取vm引數
String value=System.getProperty("customer.value");
String key=System.getProperty("customer.key");
System.out.println("value:"+value+",key:"+key);
//獲取環境變數
String templateValue=System.getenv("template");
System.out.println("環境變數:"+templateValue);
//獲取程式變數
System.out.println(args[0]+","+args[1]+","+args[2]);
SpringApplication.run(BootServer.class);
}
}
列印結果如下,
列印出了配置的“1 2 3”.
前邊提到在程式開始時會有一長串的命令,我們點開來看,能找到程式變數的影子,
其實就是在"java -jar xxx.jar xxx.xxx.xx 引數",這裡的引數就是程式變數。
三、總結
主要分析了,平時開發使用比較多的幾種變數及用法,
1、JVM引數、程式變數、環境變數;
2、JVM引數通過“-D”來配置;程式變數在啟動類後跟帶“空格”的引數值;
3、JVM引數、環境變數在每個類中都可以獲取到,而程式變數僅在啟動類的main函式中;
4、JVM引數、環境變數分別通過System.getProperty()、System.getenv()方法獲取;
推薦閱讀