最近遇到一個需求,服務器實例需要獲取當前的環境變量。經過查資料,發現環境變量可以在兩個地方設置。
一、在系統層面設置環境變量
在系統層面設置環境變量,之前我們應該都操作過,以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添加,這樣在該程序運行時,就自動生效了。如下圖: