【小家Java】Java环境变量(Env)和系统属性(Property)详解---工具文章
每篇一句
胡適說:大膽猜想,小心求證
前言
首先說明,這是一篇工具文章,主要記錄下我們Java環境變量和系統屬性,方便以后的查閱。
當程序中需要使用與操作系統相關的變量(例如:文件分隔符、換行符)時,Java提供了System類的靜態方法getenv()和getProperty()用于返回系統相關的環境變量與系統屬性。
- getenv方法返回的變量大多與操作系統相關
- getProperty方法返回的變量大多與java程序有關
系統屬性和環境變量都是key-value形式的。兩種機制都能用來將用戶定義的信息傳遞給 Java進程。
- 環境變量產生更多的全局效應,因為它們不僅對Java子進程可見,而且對于定義它們的進程的所有子進程都是可見的。在不同的操作系統上,它們的語義有細微的差別,比如,不區分大小寫。
因此環境變量更可能有意料不到的副作用。程序中盡可能使用系統屬性。環境變量應該在需要全局效應的時候使用,或者在外部系統接口要求使用環境變量時使用(比如 PATH)
Demo
環境變量Env
使用System.getenv()獲取系統的所有環境變量的Map,注意它是一個UnmodifiableCollection,是一個只讀視圖
環境變量并不提供set方法,即沒有System.setEnv…方法
public static void main(String[] args) {Map<String, String> envMap = System.getenv();envMap.forEach((key, value) -> {System.out.println(key + "=" + value);});}小吐槽一句:getenv()這個方法并沒有遵循駝峰規范,個人認為它是一種不規范的命名方式。Java.awt中有一個類(我記不太清楚了)所有方法命名都沒遵循駝峰,后來在1.1里就被另外一個類代替,自己被標記為過時了,課件JDK對標準的重視~~
下面看輸出結果,然后做解釋如下:
系統屬性Property
系統屬性的作用范圍沒那么大,所以Java是允許我們用API的方式.setProperty自己設置系統屬性的。
public static void main(String[] args) {Properties properties = System.getProperties();System.setProperty("myProperty", "自定義的系統屬性~"); // 允許自定義系統屬性properties.forEach((key, value) -> {System.out.println(key + "=" + value);});}下面看輸出結果,然后做解釋如下:
匯總
下面是對常用的,我們更關注的key做了個文本總結,方便搜索、查閱。
環境變量:
系統屬性:
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 :文件分隔符 path.separator :路徑分隔符 line.separator :行分隔符 user.name :用戶的賬戶名稱 user.home :用戶的主目錄 user.dir:用戶的當前工作目錄附:SpringBoot中"/env"端點的訪問結果:
飄紅的兩處就是對應著咱們本文的一些值。(可以看出它哥倆的優先級還是相對來說比較高的,比我們自定的配置文件application.properties的優先級高)
總結
這邊文章的意義一方面是作為工具文章,方便查閱。另一方面是為了解Spring的環境、屬性配置機制做鋪墊,讓能有個更快的了解。
其實Spring對環境變量、配置管理的了解程度,將直接影響到你對SpringBoot和Spring Cloud的深入學習,因為它哥倆基本上靠配置驅動了非常多的東西。比如Endpoint、Actuator、Enviroment等等,而環境變量和系統屬性是在此處、甚至在Maven中必不可少的一環~
關注A哥
| 個人站點 | www.yourbatman.cn |
| yourbatman@qq.com | |
| 微 信 | fsx641385712 |
| 活躍平臺 | |
| 公眾號 | BAT的烏托邦(ID:BAT-utopia) |
| 知識星球 | BAT的烏托邦 |
| 每日文章推薦 | 每日文章推薦 |
總結
以上是生活随笔為你收集整理的【小家Java】Java环境变量(Env)和系统属性(Property)详解---工具文章的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 22.从零开始开发QT软件思路(单片机的
- 下一篇: elementui el-table选择