淺談System.getenv()和System.getProperty()的區(qū)別
最近遇到一個(gè)需求,服務(wù)器實(shí)例需要獲取當(dāng)前的環(huán)境變量。經(jīng)過(guò)查資料,發(fā)現(xiàn)環(huán)境變量可以在兩個(gè)地方設(shè)置。
一、在系統(tǒng)層面設(shè)置環(huán)境變量
在系統(tǒng)層面設(shè)置環(huán)境變量,之前我們應(yīng)該都操作過(guò),以windows系統(tǒng)為例

System.getenv()可以獲取的在這里設(shè)置的變量。
二、在java虛擬機(jī)層面設(shè)置環(huán)境變量
個(gè)人理解,System.getProperty()可以獲取在JVM 層面的變量,有些變量在JVM啟動(dòng)后,就內(nèi)置了,如:
| 參數(shù)值 | 參數(shù)含義 |
| java.version | Java 運(yùn)行時(shí)環(huán)境版本 |
| java.vendor | Java 運(yùn)行時(shí)環(huán)境供應(yīng)商 |
| java.vendor.url | Java 供應(yīng)商的 URL |
| java.home | Java 安裝目錄 |
| java.vm.specification.version | Java 虛擬機(jī)規(guī)范版本 |
| java.vm.specification.vendor | Java 虛擬機(jī)規(guī)范供應(yīng)商 |
| java.vm.specification.name | Java 虛擬機(jī)規(guī)范名稱(chēng) |
| java.vm.version | Java 虛擬機(jī)實(shí)現(xiàn)版本 |
| java.vm.vendor | Java 虛擬機(jī)實(shí)現(xiàn)供應(yīng)商 |
| java.vm.name | Java 虛擬機(jī)實(shí)現(xiàn)名稱(chēng) |
| java.specification.version | Java 運(yùn)行時(shí)環(huán)境規(guī)范版本 |
| java.specification.vendor | Java 運(yùn)行時(shí)環(huán)境規(guī)范供應(yīng)商 |
| java.specification.name | Java 運(yùn)行時(shí)環(huán)境規(guī)范名稱(chēng) |
| java.class.version | Java 類(lèi)格式版本號(hào) |
| java.class.path | Java 類(lèi)路徑 |
| java.library.path | 加載庫(kù)時(shí)搜索的路徑列表 |
| java.io.tmpdir | 默認(rèn)的臨時(shí)文件路徑 |
| java.compiler | 要使用的 JIT 編譯器的名稱(chēng) |
| java.ext.dirs | 一個(gè)或多個(gè)擴(kuò)展目錄的路徑 |
| os.name | 操作系統(tǒng)的名稱(chēng) |
| os.arch | 操作系統(tǒng)的架構(gòu) |
| os.version | 操作系統(tǒng)的版本 |
| file.separator | 文件分隔符(在 UNIX 系統(tǒng)中是“/” ) |
| path.separator | 路徑分隔符(在 UNIX 系統(tǒng)中是“:” ) |
| line.separator | 行分隔符(在 UNIX 系統(tǒng)中是“/n” ) |
| user.name | 用戶(hù)的賬戶(hù)名稱(chēng) |
| user.home | 用戶(hù)的主目錄 |
| user.dir | 用戶(hù)的當(dāng)前工作目錄 |
還可以在代碼層面,通過(guò)System.setProperty(key, value)把值設(shè)置進(jìn)去。
或者web容器層面,在服務(wù)器容器啟動(dòng)時(shí),把變量加進(jìn)去,最終會(huì)傳遞給JVM。
例如我們公司之前用的,通過(guò)System.getProperty("weblogic.Name")獲取服務(wù)的實(shí)例名稱(chēng)。
個(gè)人理解就是weblogic起啟動(dòng)服務(wù)是初始化到JVM中的。
或者可以直接在eclipse中的VM arguments添加,這樣在該程序運(yùn)行時(shí),就自動(dòng)生效了。
如下圖:


System.getenv(String name)方法的意義和用法
最近工程里用到
String path = System.getenv(“config_path”);
這樣取路徑的方法。記錄一下。
1.在windows中config_path指的是系統(tǒng)的環(huán)境變量。如:

此時(shí)取出來(lái)的path為:D:\work。有了這個(gè)路徑就可以做一些讀取文件的操作了。
2.在linux中config_path指的是在/etc/profile文件末尾配置環(huán)境變量 export config_path=XXX/XXX。(XXX/XXX為文件地址,退出保存,并source /etc/profile生效)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java開(kāi)發(fā)AOP基礎(chǔ)JdkDynamicAopProxy
這篇文章主要為大家介紹了java開(kāi)發(fā)AOP基礎(chǔ)JdkDynamicAopProxy源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
SpringSecurit鹽值加密的密碼驗(yàn)證以及強(qiáng)密碼驗(yàn)證過(guò)程
在密碼加密過(guò)程中,鹽值的使用可以增強(qiáng)密碼的安全性,如果忘記存儲(chǔ)鹽值,將無(wú)法驗(yàn)證密碼,強(qiáng)密碼應(yīng)包含數(shù)字、字母和特殊字符,長(zhǎng)度應(yīng)在8到30位之間,以提高賬戶(hù)安全2023-03-03
淺談springfox-swagger原理解析與使用過(guò)程中遇到的坑
本篇文章主要介紹了淺談springfox-swagger原理解析與使用過(guò)程中遇到的坑,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-02-02
Java基本語(yǔ)法之內(nèi)部類(lèi)示例詳解
本文帶大家認(rèn)識(shí)Java基本語(yǔ)法——內(nèi)部類(lèi),將一個(gè)類(lèi)定義放在另一類(lèi)的定義的內(nèi)部,這個(gè)就是內(nèi)部類(lèi),內(nèi)部類(lèi)允許將一些邏輯相關(guān)的類(lèi)組織在一起,并能夠控制位于內(nèi)部的類(lèi)的可視性,感興趣的可以了解一下2022-03-03
Hibernate validator使用以及自定義校驗(yàn)器注解
這篇文章主要介紹了Hibernate validator使用以及自定義校驗(yàn)器注解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
Spring Boot使用Druid進(jìn)行維度的統(tǒng)計(jì)和監(jiān)控
這篇文章主要介紹了Spring Boot使用Druid進(jìn)行維度的統(tǒng)計(jì)和監(jiān)控,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-04-04

