淺談System.getenv()和System.getProperty()的區別

最近遇到一個需求,服務器實例需要獲取當前的環境變量。經過查資料,發現環境變量可以在兩個地方設置。

一、在系統層面設置環境變量

在系統層面設置環境變量,之前我們應該都操作過,以windows系統為例

System.getenv()可以獲取的在這裡設置的變量。

二、在java虛擬機層面設置環境變量

個人理解,System.getProperty()可以獲取在JVM 層面的變量,有些變量在JVM啟動後,就內置瞭,如:

參數值 參數含義
java.version Java 運行時環境版本
java.vendor Java 運行時環境供應商
java.vendor.url Java 供應商的 URL
java.home Java 安裝目錄
java.vm.specification.version Java 虛擬機規范版本
java.vm.specification.vendor Java 虛擬機規范供應商
java.vm.specification.name Java 虛擬機規范名稱
java.vm.version Java 虛擬機實現版本
java.vm.vendor Java 虛擬機實現供應商
java.vm.name Java 虛擬機實現名稱
java.specification.version Java 運行時環境規范版本
java.specification.vendor Java 運行時環境規范供應商
java.specification.name Java 運行時環境規范名稱
java.class.version Java 類格式版本號
java.class.path Java 類路徑
java.library.path 加載庫時搜索的路徑列表
java.io.tmpdir 默認的臨時文件路徑
java.compiler 要使用的 JIT 編譯器的名稱
java.ext.dirs 一個或多個擴展目錄的路徑
os.name 操作系統的名稱
os.arch 操作系統的架構
os.version 操作系統的版本
file.separator 文件分隔符(在 UNIX 系統中是“/” )
path.separator 路徑分隔符(在 UNIX 系統中是“:” )
line.separator 行分隔符(在 UNIX 系統中是“/n” )
user.name 用戶的賬戶名稱
user.home 用戶的主目錄
user.dir 用戶的當前工作目錄

還可以在代碼層面,通過System.setProperty(key, value)把值設置進去。

或者web容器層面,在服務器容器啟動時,把變量加進去,最終會傳遞給JVM。

例如我們公司之前用的,通過System.getProperty(“weblogic.Name”)獲取服務的實例名稱。

個人理解就是weblogic起啟動服務是初始化到JVM中的。

或者可以直接在eclipse中的VM arguments添加,這樣在該程序運行時,就自動生效瞭。

如下圖:

System.getenv(String name)方法的意義和用法

最近工程裡用到

String path = System.getenv(“config_path”);

這樣取路徑的方法。記錄一下。

1.在windows中config_path指的是系統的環境變量。如:

此時取出來的path為:D:\work。有瞭這個路徑就可以做一些讀取文件的操作瞭。

2.在linux中config_path指的是在/etc/profile文件末尾配置環境變量 ​export config_path=XXX/XXX。(XXX/XXX為文件地址,退出保存,並​source /etc/profile​生效)。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: