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添加,這樣在該程序運行時,就自動生效了。如下圖:

 

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