Java System.getProperty vs System.getenv

1. Uvod

Paket java.lang automatski se uvozi u Java aplikaciji. Ovaj paket sadrži mnoge često korištene klase iz NullPointerException do Objekt, Matematika, i Niz.

The java.lang.Sustav razred je a konačni klase, što znači da je ne možemo podklasirati, stoga su sve metode statički.

Razmotrit ćemo razlike između njih dvoje Sustav metode za svojstva sustava za čitanje i varijable okoline.

Ove metode su getProperty i getenv.

2. Korištenje System.getProperty ()

Java platforma koristi Svojstva objekt pružiti informacije o lokalnom sustavu i konfiguraciji i mi to zovemo Svojstva sustava.

Svojstva sustava uključuju informacije poput trenutnog korisnika, trenutne verzije Java runtime-a i separatora imena puta datoteke.

U donjem kodu koristimo System.getProperty (“log_dir”) za očitavanje vrijednosti nekretnine log_dir. Također koristimo zadani parametar vrijednosti, pa ako svojstvo ne postoji, getProperty povrati od /tmp/ zapisnik:

Niz log_dir = System.getProperty ("log_dir", "/ tmp / log"); 

Da biste ažurirali svojstva sustava tijekom izvođenja, upotrijebite metodu System.setProperty metoda:

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

Svojim svojstvima ili vrijednostima konfiguracije možemo proslijediti aplikaciji pomoću svojstvoName argument naredbenog retka u formatu:

java -jar jarName -DpropertyName = vrijednost

Postavljanje svojstva foo s vrijednošću bar u app.jar:

java -jar aplikacija -Dfoo = "bar"

System.getProperty uvijek će vratiti a Niz.

3. Korištenje System.getenv ()

Varijable okruženja su parovi ključ / vrijednost poput Svojstva. Mnogi operativni sustavi koriste varijable okruženja kako bi omogućili prijenos podataka o konfiguraciji u aplikacije.

Način postavljanja varijable okruženja razlikuje se od jednog do drugog operativnog sustava. Na primjer, u sustavu Windows koristimo aplikaciju System Utility s upravljačke ploče, dok u Unixu koristimo skripte ljuske.

Prilikom stvaranja procesa, prema zadanim postavkama nasljeđuje klonsko okruženje svog nadređenog procesa.

Sljedeći isječak koda prikazuje upotrebu lambda izraza za ispis svih varijabli okoline.

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

getenv () vraća samo za čitanje Karta. Pokušaj dodavanja vrijednosti na kartu baca znak UnsupportedOperationException.

Da biste dobili jednu varijablu, nazovite getenv s imenom varijable:

Niz log_dir = System.getenv ("log_dir");

S druge strane, iz naše aplikacije možemo stvoriti još jedan proces i dodati nove varijable u njegovo okruženje.

Mi koristimo za stvaranje novog procesa u Javi ProcessBuilder klasa koja ima metodu tzv okoliš. Ova metoda vraća a Karta ali ovaj put karta nije samo za čitanje, što znači da joj možemo dodati elemente:

ProcessBuilder pb = novi ProcessBuilder (argumenti); Karta env = pb.environment (); env.put ("log_dir", "/ tmp / log"); Procesni postupak = pb.start ();

4. Razlike

Iako su obje u osnovi mape koje pružaju Niz vrijednosti za Niz tipke, pogledajmo nekoliko razlika:

  1. Svojstva možemo ažurirati tijekom izvođenja, dok su varijable okruženja nepromjenjiva kopija varijabli operativnog sustava.
  2. Svojstva se sadrže samo unutar Java platforme, dok su varijable okruženja globalne na razini operativnog sustava - dostupne svim aplikacijama pokrenutim na istom stroju.
  3. Svojstva moraju postojati prilikom pakiranja aplikacije, ali u operativnom sustavu možemo stvoriti varijable okruženja u gotovo bilo kojem trenutku.

5. Zaključak

Iako su konceptualno slični, primjena i svojstava i varijabli okoline prilično se razlikuju.

Izbor između opcija često je pitanje opsega. Korištenjem varijabli okruženja, ista se aplikacija može implementirati na više računala za pokretanje različitih instanci, a može se konfigurirati na razini operativnog sustava ili čak u AWS ili Azure konzolama. Uklanjanje potrebe za obnovom aplikacije za ažuriranje konfiguracije.

Uvijek se toga sjetite getProperty slijedi konvenciju o slučaju deva i getenv ne.