做了這些年開發,今天第一次梳理了這三種常用的變量

  在前邊分享自定義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()方法獲取;

 

推薦閱讀

springboot如何使用自定義配置文件

springboot竟然有5種默認的加載路徑,你未必都知道

5分鐘快速搭建一個springboot的項目

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章