首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 中 System.getenv() 與 System.getProperties() 區別詳解

     編輯:Java 相關知識

核心區別

維度System.getenv()System.getProperties()
數據來源操作系統級環境變量JVM 系統屬性
作用範圍進程外部,全局可見JVM 進程內部
設置方式OS 環境變量設置 (Windows 環境變量、Linux export)啟動參數 -Dkey=value 或代碼 System.setProperty()
典型用途跨進程配置、容器化部署注入JVM 調優、應用內部配置、版本信息

System.getenv() 詳解

  • 獲取操作系統環境變量,如 PATH、JAVA_HOME、USER
  • getenv() 返回不可修改的 Map<String, String>
  • getenv(String name) 獲取指定變量,不存在返回 null
  • Windows 不區分大小寫,Linux 區分大小寫

System.getProperties() 詳解

JDK 文檔定義的標準系統屬性包括:

系統屬性列表

  • java.version、java.home、os.name、user.dir 等
  • 自定義屬性:java -Dapp.config=prod -Ddb.url=jdbc:mysql://... MainClass
  • 代碼中動態設置:System.setProperty("key", "value")
  • 屬性值均為 String 類型

實戰選型指南

場景推薦方案
Docker/K8s 環境注入配置環境變量 (getenv)
JVM 參數調優 (Heap、GC)系統屬性 (-D)
應用業務配置 (數據庫、第三方密鑰)環境變量 (十二因子應用規範)
單元測試臨時覆蓋配置系統屬性 (System.setProperty)

代碼示例

public class EnvVsProps {
    public static void main(String[] args) {
        // 環境變量
        String javaHome = System.getenv("JAVA_HOME");
        System.out.println("JAVA_HOME = " + javaHome);

        // 系統屬性
        String appMode = System.getProperty("app.mode", "dev"); // 默認值
        System.out.println("app.mode = " + appMode);

        // 遍歷所有系統屬性
        System.getProperties().forEach((k, v) -> 
            System.out.println(k + " = " + v));
    }
}

總結

System.getenv() 讀取 OS 環境變量,屬於部署層配置;System.getProperties() 讀取 JVM 系統屬性,屬於運行時配置。 現代雲原生應用推薦使用環境變量管理配置,系統屬性專注 JVM 行為控制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved