Java System.getProperty לעומת System.getenv

1. הקדמה

החבילה java.lang מיובא אוטומטית ביישום Java. חבילה זו מכילה שיעורים נפוצים רבים מ NullPointerException ל לְהִתְנַגֵד, מתמטיקה, ו חוּט.

ה מערכת java.lang הכיתה היא א סופי הכיתה, כלומר איננו יכולים לסווג אותה מחדש, ולכן כל השיטות הן סטָטִי.

אנו הולכים לבחון את ההבדלים בין שניים מערכת שיטות עבור קריאת מאפייני מערכת ומשתני סביבה.

שיטות אלה הן getProperty ו getenv.

2. שימוש System.getProperty ()

פלטפורמת Java משתמשת ב- נכסים חפץ לספק מידע על המערכת והתצורה המקומית ואנחנו קוראים לזה מאפייני מערכת.

מאפייני המערכת כוללים מידע כגון המשתמש הנוכחי, הגרסה הנוכחית של זמן הריצה של Java ומפריד בין שם הנתיב לקבצים.

בקוד שלהלן אנו משתמשים System.getProperty ("log_dir") לקרוא את שווי הנכס log_dir. אנו משתמשים בפרמטר ערך ברירת המחדל כך שאם הנכס אינו קיים, getProperty החזרות של /tmp/עֵץ:

מחרוזת log_dir = System.getProperty ("log_dir", "/ tmp / log"); 

כדי לעדכן את מאפייני המערכת בזמן הריצה, השתמש בשיטה System.setProperty שיטה:

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

אנו יכולים להעביר את המאפיינים או ערכי התצורה שלנו ליישום באמצעות ה- propertyName טיעון שורת פקודה בפורמט:

java -jar jarName -DpropertyName = ערך

הגדרת המאפיין של foo עם ערך סרגל ב- app.jar:

java -jar app -Dfoo = "bar"

System.getProperty תמיד יחזיר א חוּט.

3. שימוש System.getenv ()

משתני סביבה הם זוגות מפתח / ערך כמו נכסים. מערכות הפעלה רבות משתמשות במשתני סביבה כדי לאפשר העברת מידע תצורה ליישומים.

הדרך להגדיר משתנה סביבה שונה ממערכת הפעלה אחת לאחרת. לדוגמא, ב- Windows אנו משתמשים ביישום תוכנית השירות מלוח הבקרה ואילו ב- Unix אנו משתמשים בסקריפטים של מעטפת.

בעת יצירת תהליך, כברירת מחדל הוא יורש סביבת שיבוט של תהליך האב שלו.

קטע הקוד הבא מראה שימוש בביטוי למבדה להדפסת כל משתני הסביבה.

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

getenv () מחזירה קריאה בלבד מַפָּה. ניסיון להוסיף ערכים למפה זורק לא נתמךOperationException.

כדי להשיג משתנה יחיד חייג getenv עם שם המשתנה:

מחרוזת log_dir = System.getenv ("log_dir");

מצד שני, אנו יכולים ליצור תהליך נוסף מהיישום שלנו ולהוסיף משתנים חדשים לסביבתו.

כדי ליצור תהליך חדש בג'אווה, אנו משתמשים ProcessBuilder בכיתה שיש לה שיטה שנקראת סביבה. שיטה זו מחזירה א מַפָּה אך הפעם המפה אינה לקריאה בלבד, כלומר נוכל להוסיף לה אלמנטים:

ProcessBuilder pb = חדש ProcessBuilder (טענות); מפת env = pb.environment (); env.put ("log_dir", "/ tmp / log"); תהליך תהליך = pb.start ();

4. ההבדלים

למרות ששניהם הם בעצם מפות המספקות חוּט ערכים עבור חוּט מקשים, בואו נסתכל על כמה הבדלים:

  1. אנו יכולים לעדכן את המאפיינים בזמן ריצה בעוד שמשתני הסביבה הם עותק בלתי משתנה של המשתנים של מערכת ההפעלה.
  2. מאפיינים כלולים רק בפלטפורמת Java בעוד שמשתני הסביבה הם גלובליים ברמת מערכת ההפעלה - זמינים לכל היישומים הפועלים על אותה מכונה.
  3. מאפיינים חייבים להתקיים בעת אריזת היישום, אך אנו יכולים ליצור משתני סביבה במערכת ההפעלה כמעט בכל נקודה.

5. מסקנה

למרות שהם דומים מבחינה רעיונית, היישום של מאפיינים ושל משתני סביבה שונה לחלוטין.

הבחירה בין האפשרויות היא לרוב שאלה של היקף. באמצעות משתני סביבה, ניתן לפרוס את אותו יישום למספר מכונות להפעלת מופעים שונים וניתן להגדיר אותו ברמת מערכת ההפעלה או אפילו במסוף AWS או Azure. מסיר את הצורך לבנות מחדש את היישום כדי לעדכן את התצורה.

תמיד תזכור את זה getProperty עוקב אחר אמנת מארז הגמלים ו getenv לא.


$config[zx-auto] not found$config[zx-overlay] not found