亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中的System.getenv()和System.getProperty()使用詳解

 更新時間:2024年11月27日 08:54:43   作者:星辰鴻溟  
文章介紹了Java中用于讀取環(huán)境配置信息的兩種方法:System.getenv()和System.getProperty(),前者讀取系統(tǒng)環(huán)境變量,返回一個不可修改的Map;后者獲取JVM環(huán)境變量值,可以通過-D參數(shù)設(shè)置,文章還提到,通過這兩種方法可以簡化配置,不需要修改代碼

System.getenv()和System.getProperty()是Java種常用的兩種讀取環(huán)境配置信息的方法,它們都是java.lang.System類的方法,用途有相似之處,但我們在實際使用中,需要更加注意二者的區(qū)別。

1. System.getenv()

System.getenv()讀取的是當前系統(tǒng)環(huán)境的環(huán)境變量。

要深入理解環(huán)境變量的本質(zhì),需要對系統(tǒng)父子進程關(guān)系有更加清晰的認識。

一般來說,子進程在創(chuàng)建時,會將父進程當時的環(huán)境變量復(fù)制一份,而父進程中之后發(fā)生的環(huán)境變量的變動,不會影響子進程中對應(yīng)的環(huán)境變量。

當不傳入?yún)?shù)時,System.getenv()的返回值為一個只讀的Map,其中包括當前環(huán)境下所有環(huán)境變量。

下面的例子中:

我們將打印出這條語句執(zhí)行時環(huán)境中所有的環(huán)境變量和它們對應(yīng)的值,在 windows 中是 用戶環(huán)境變量和系統(tǒng)環(huán)境變量的值,

System.getenv().forEach((key, value) -> {
    System.out.println(key + ":" + value);
});

注意:通過 System.getenv() 獲取的 Map 是不支持修改的,為了有更深入的理解,我們熟悉下這塊的代碼

  public static java.util.Map<String,String> getenv() {
      // ......
      return ProcessEnvironment.getenv();
  }

ProcessEnvironment.getenv() 該方法的核心邏輯如下,從以下代碼中可以看出,返回的 map 是通過Collections.unmodifiableMap() 處理的,因此,返回的map 是不能被修改的。

final class ProcessEnvironment extends HashMap<String,String>{
    private static final Map<String,String> theUnmodifiableEnvironment;
    static {
        theEnvironment  = new ProcessEnvironment();
		theUnmodifiableEnvironment
           	 = Collections.unmodifiableMap(theEnvironment);
    }
    // Only for use by System.getenv()
    static Map<String,String> getenv() {
        return theUnmodifiableEnvironment;
    }
}

一般我們在程序中使用時,一般不會獲取全部的系統(tǒng)環(huán)境變量,因而可以通過 System.getEnv(key) 獲取對應(yīng)環(huán)境變量的值。

 public static String getenv(String name) {
     // .....
     return ProcessEnvironment.getenv(name);
 }

2. System.getProperty()

通上,通過 System.getProperty(key)獲取單個變量值,通過System.getPropertys() 獲取所有 JVM 環(huán)境變量值。

如下:

System.getProperties().forEach((k,v) -> {
    System.out.println(k + "=" + v);
});

這里列出一些常見的

// classpath
sun.boot.class.path=C:\Program Files\Java\jdk1.8.0_131\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_131\jre\lib\rt.jar;....
java.library.path=C:\Program Files\Java\jdk1.8.0_131\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;
file.separator=\
sun.jnu.encoding=GBK
java.version=1.8.0_131
java.vm.info=mixed mode

當我們通過 啟動JVM時,可以通過 -D 設(shè)置JVM 環(huán)境變量值,在我們的程序中我們也可以通過,System.setProperty(key,value) 設(shè)置JVM 環(huán)境變量,該值在整個JVM 間是共享的。

使用場景

最近線上大數(shù)據(jù) Hadoop 集群開啟了Kerberos,為了讓業(yè)務(wù)盡量不改動代碼的原則。

通過 System.getenv()System.getenv() 實現(xiàn)了業(yè)務(wù)代碼零改動下,使用開啟Kerberos后的集群。

總結(jié)

通過 System.getenv()getProperty() 可以簡化我們的有些配置,相比于 xml 等配置文件。

這種方式更輕量,如果我們的程序中沒有配置文件,但想使某一兩項功能實現(xiàn)可配置,通過System.getenv()getProperty()可以非常容易的實現(xiàn)。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • idea2020.3配置maven環(huán)境并配置Tomcat的詳細教程

    idea2020.3配置maven環(huán)境并配置Tomcat的詳細教程

    這篇文章主要介紹了idea2020.3配置maven環(huán)境并配置Tomcat的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • 在SpringBoot中整合使用Netty框架的詳細教程

    在SpringBoot中整合使用Netty框架的詳細教程

    這篇文章主要介紹了在SpringBoot中整合使用Netty框架的教程,本文給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • springboot pojo對象日期屬性的問題

    springboot pojo對象日期屬性的問題

    這篇文章主要介紹了springboot pojo對象日期屬性的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • SpringBoot+RabbitMQ?實現(xiàn)死信隊列的示例

    SpringBoot+RabbitMQ?實現(xiàn)死信隊列的示例

    本文主要介紹了SpringBoot+RabbitMQ?實現(xiàn)死信隊列的示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-06-06
  • SpringBoot如何使用過濾器進行XSS防御

    SpringBoot如何使用過濾器進行XSS防御

    想對全局的請求都進行XSS防御可以使用servlet中的過濾器或者spring mvc中的攔截器,下面我們就來看看如何使用servlet中的過濾器進行XSS防御吧
    2024-11-11
  • java中的匿名內(nèi)部類詳細總結(jié)

    java中的匿名內(nèi)部類詳細總結(jié)

    以下是對java中的匿名內(nèi)部類進行了詳細的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-10-10
  • Spring?Security中如何獲取AuthenticationManager對象

    Spring?Security中如何獲取AuthenticationManager對象

    有時需要使用AuthenticationManager(以下簡稱Manager)對象,可是這個對象不是Bean,沒有直接保存在Spring的Bean庫中,那么如何獲取Spring Security中的這個對象呢,需要的朋友可以參考下
    2022-11-11
  • MyBatis-Plus+達夢數(shù)據(jù)庫實現(xiàn)高效數(shù)據(jù)持久化的示例

    MyBatis-Plus+達夢數(shù)據(jù)庫實現(xiàn)高效數(shù)據(jù)持久化的示例

    這篇文章主要介紹了MyBatis-Plus和達夢數(shù)據(jù)庫實現(xiàn)高效數(shù)據(jù)持久化,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-08-08
  • SpringBoot中的server.context-path的實現(xiàn)

    SpringBoot中的server.context-path的實現(xiàn)

    本文主要介紹了SpringBoot中的server.context-path的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2024-08-08
  • Maven構(gòu)建Hadoop項目的實踐步驟

    Maven構(gòu)建Hadoop項目的實踐步驟

    本文主要介紹了Maven構(gòu)建Hadoop項目的實踐步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2023-06-06

最新評論