在前邊分享自定義springboot的組態檔的時候,提到了JVM變數和系統環境變數的設定,今天想對這塊的內容做個梳理,
1、什麼是JVM變數、系統環境變數、程式變數;
2、怎麼使用這些變數;
3、這些變數如何起作用的;
所謂的JVM變數和平時見到的不太一樣,比如-Xmx1024m這樣的,這裡說的JVM變數更確切的說是java命令中的一個選項,如,檢視java命令的幫助,
我們前邊在idea中進行設定的時候,使用的也是「-D」這個選項,在服務啟動的時候會設定一個key-value的屬性。並且從上面的註釋也可以看到對「-D」的解釋是「設定系統屬性」,當然設定了系統屬性就要獲取系統屬性,後面會說到如何獲取系統屬性。類似「-D」這樣的選項還有這些常見的:java -classpath、java -version,還有下面的java -javaagent:
所謂系統環境變數,更多的理解為某個服務的全域性的環境變數,供這個服務中的所有元件來使用,
所謂程式變數指的是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變數、環境變數、程式變數,下面需要看下如何使用這些變數。
其實在前面的文章中已經使用了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變數就是以這樣的形式傳到程式裡的。
環境變數的設定,在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()」方法即可,而且在程式的每個類中都可以使用,
好了,最後來看下程式變數是如何使用的,其設定方式也很簡單,
在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()方法獲取;
推薦閱讀