Java System.getProperty vs System.getenv

1. Bemutatkozás

A csomag java.lang automatikusan importálódik, amikor egy Java alkalmazásba kerül. Ez a csomag sok gyakran használt osztályt tartalmaz NullPointerException nak nek Tárgy, Math, és Húr.

A java.lang.Rendszer osztály egy végső osztály, vagyis nem tudjuk alosztályba sorolni, ezért minden módszer igen statikus.

Megvizsgáljuk a kettő közötti különbségeket Rendszer módszerek a rendszer tulajdonságainak és környezeti változóknak az olvasása.

Ezek a módszerek getProperty és getenv.

2. Használata System.getProperty ()

A Java platform a Tulajdonságok objektumot nyújtani információk a helyi rendszerről és konfigurációról és hívjuk Rendszer tulajdonságai.

A Rendszer tulajdonságai olyan információkat tartalmaznak, mint az aktuális felhasználó, a Java futásidejének aktuális verziója és a fájl elérési útjának elválasztója.

Az alábbi kódban használjuk System.getProperty (“log_dir”) hogy leolvassák az ingatlan értékét log_dir. Használjuk az alapértelmezett érték paramétert is, így ha a tulajdonság nem létezik, getProperty visszatér /tmp/ log:

Karakterlánc log_dir = System.getProperty ("log_dir", "/ tmp / log"); 

A rendszer tulajdonságainak futás közbeni frissítéséhez használja a módszert System.setProperty módszer:

System.setProperty ("log_dir", "/ tmp / log");

A saját tulajdonságainkat vagy konfigurációs értékeinket átadhatjuk az alkalmazásnak a ingatlan neve parancssori argumentum a következő formátumban:

java -jar jarName -DpropertyName = érték

A foo tulajdonságának beállítása bar értékkel az app.jar fájlban:

java -jar app -Dfoo = "bar"

System.getProperty mindig visszatér a Húr.

3. Használata System.getenv ()

Környezeti változók kulcs / érték párok, mint például Tulajdonságok. Számos operációs rendszer környezeti változókat használ a konfigurációs információk alkalmazásba továbbításához.

A környezeti változó beállításának módja operációs rendszerenként eltér. Például Windows rendszerben a Rendszer segédprogram alkalmazást használjuk a vezérlőpultról, míg a Unixban shell parancsfájlokat.

Folyamat létrehozásakor alapértelmezés szerint örökli a szülő folyamat klónkörnyezetét.

A következő kódrészlet egy lambda kifejezés használatát mutatja az összes környezeti változó kinyomtatásához.

System.getenv (). ForEach ((k, v) -> {System.out.println (k + ":" + v);}); 

getenv () csak olvashatót ad vissza Térkép. Értékek hozzáadása a térképhez egy UnsupportedOperationException.

Egyetlen változó megszerzéséhez hívjon getenv a változó nevével:

Karakterlánc log_dir = System.getenv ("log_dir");

Másrészt létrehozhatunk egy másik folyamatot az alkalmazásunkból, és új változókat adhatunk a környezetéhez.

Új folyamat létrehozásához a Java-ban használjuk ProcessBuilder osztály, amelynek van egy úgynevezett metódusa környezet. Ez a módszer a Térkép de ezúttal a térkép nem csak olvasható, vagyis elemeket adhatunk hozzá:

ProcessBuilder pb = new ProcessBuilder (argument); Térkép env = pb.környezet (); env.put ("log_dir", "/ tmp / log"); Folyamatfolyamat = pb.start ();

4. A különbségek

Bár mindkettő lényegében térkép, amely biztosítja Húr értékei Húr kulcsokat, nézzünk meg néhány különbséget:

  1. Futás közben frissíthetjük a Tulajdonságokat, míg a Környezeti változók az operációs rendszer változók változhatatlan másolata.
  2. A tulajdonságokat csak a Java platform tartalmazza, míg a környezeti változók az operációs rendszer szintjén globálisak - elérhetőek ugyanazon a gépen futó összes alkalmazás számára.
  3. A tulajdonságoknak létezniük kell az alkalmazás csomagolásakor, de környezeti változókat az operációs rendszeren szinte bármikor létrehozhatunk.

5. Következtetés

Bár fogalmilag hasonló, mind a Tulajdonságok, mind a Környezeti Változók alkalmazása meglehetősen eltérő.

A lehetőségek közötti választás gyakran hatókör kérdése. A környezeti változók használatával ugyanaz az alkalmazás több gépre is telepíthető különböző példányok futtatásához, és konfigurálható az operációs rendszer szintjén, vagy akár az AWS vagy az Azure konzolokban. Az alkalmazás újjáépítésének eltávolítása a konfiguráció frissítéséhez.

Mindig emlékezzen erre getProperty teve-eset konvenciót követi és getenv nem.