הזריק מפה מקובץ YAML עם Spring

1. סקירה כללית

במדריך מהיר זה, אנו נסתכל מקרוב על כיצד להזריק מפה מקובץ YAML באביב אתחול.

ראשית, נתחיל במעט תובנה על קבצי YAML במסגרת Spring Framework. לאחר מכן, נציג דרך דוגמא מעשית כיצד לקשור מאפייני YAML ל- a מַפָּה.

2. קבצי YAML במסגרת האביב

שימוש בקבצי YAML לאחסון נתוני תצורה חיצוניים הוא נוהג נפוץ בקרב מפתחי Spring. בעיקרון, אביב תומך במסמכי YAML כחלופה למאפיינים ומשתמש ב- SnakeYAML מתחת למכסה המנוע כדי לנתח אותם.

ללא התייחסות נוספת, בואו נראה איך נראה קובץ YAML טיפוסי:

שרת: יציאה: 8090 יישום: שם: url היישום שלי: //myapplication.com

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

כברירת מחדל, Spring Boot קורא מאפייני תצורה מ- application.properties אוֹ application.yml בעת אתחול היישום. עם זאת, אנו יכולים להשתמש @PropertySource לטעינת קובץ YAML מותאם אישית.

עכשיו שאנחנו מכירים מהו קובץ YAML, בואו נראה איך מזריקים מאפייני YAML כ- מַפָּה באביב המגף.

3. כיצד להזריק א מַפָּה מקובץ YAML

Spring Boot לקח את החצנת הנתונים לשלב הבא על ידי מתן הערה שימושית בשם @ConfigurationProperties. ביאור זה מובא כדי להזרים מאפיינים חיצוניים בקלות מקבצי תצורה ישירות לאובייקטים של Java.

בחלק זה נסקור לעומק כיצד לקשור מאפייני YAML למחלק שעועית באמצעות ה- @ConfigurationProperties ביאור.

ראשית, בואו נגדיר כמה מאפייני ערך מפתח ב- application.yml:

שרת: יישום: שם: InjectMapFromYAML url: //injectmapfromyaml.dev תיאור: כיצד להזריק מפה מקובץ YAML בתצורת Boot Boot: ips: - 10.10.10.10 - 10.10.10.11 - 10.10.10.12 - 10.10.10.13 מערכת קבצים: - / dev / root - / dev / md2 - / dev / md4 משתמשים: root: שם משתמש: root root: rootpass אורח: שם משתמש: סיסמת אורח: passpass

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

שנית, בואו ניצור מעמד שעועית - נכסי שרת - כדי לתמצת את ההיגיון של קישור מאפייני התצורה שלנו ל- מַפָּהs:

@Component @ConfigurationProperties (קידומת = "שרת") ServerProperties ברמה הציבורית {יישום מפה פרטי; מפה פרטית config; משתמשי מפה פרטיים; // getters and setters class static public Credential {private String שם משתמש; סיסמת מחרוזת פרטית; // גטרים וקובעים}}

כפי שאנו רואים, עיטרנו את נכסי שרת כיתה עם @ConfigurationProperties. בדרך זו, אנו אומרים ל- Spring למפות את כל המאפיינים עם הקידומת שצוינה לאובייקט של נכסי שרת.

נזכיר כי האפליקציה שלנו צריכה להיות מופעלת גם עבור מאפייני תצורה, אם כי זה נעשה באופן אוטומטי ברוב יישומי Spring Boot.

לבסוף, בואו לבדוק אם מאפייני ה- YAML שלנו מוזרקים כראוי כ- מַפָּהs:

@RunWith (SpringRunner.class) מחלקת @ SpringBootTest MapFromYamlIntegrationTest {@ אוטומטי שרת ServerProperties serverProperties; @ מבחן ציבורי בטל כאשר YamlFileProvidedThenInjectSimpleMap () {assertThat (serverProperties.getApplication ()) .containsOnlyKeys ("שם", "url", "תיאור"); assertThat (serverProperties.getApplication () .get ("שם")). isEqualTo ("InjectMapFromYAML"); } @Test ציבורי בטל כאשרYamlFileProvidedThenInjectComplexMap () {assertThat (serverProperties.getConfig ()). HasSize (2); assertThat (serverProperties.getConfig () .get ("ips") .get (0)). isEqualTo ("10.10.10.10"); assertThat (serverProperties.getUsers () .get ("root") .getUsername ()). isEqualTo ("root"); }}

4. @ConfigurationProperties לעומת @ערך

עכשיו בואו נעשה השוואה מהירה של @ConfigurationProperties ו @ערך.

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

בקצרה, @Value מאפשר לנו להזריק ישירות מאפיין מסוים ערך לפי המפתח שלה. למרות זאת, @ConfigurationProperties ביאור קושר מאפיינים מרובים לאובייקט מסוים ומספק גישה למאפיינים דרך האובייקט הממופה.

באופן כללי, אביב ממליץ להשתמש @ConfigurationProperties על @ערך כשמדובר בהזרקת נתוני תצורה. @ConfigurationProperties מציע דרך נהדרת לרכז ולקבץ מאפייני תצורה באובייקט מובנה שנוכל להזריק אחר כך לשעועית אחרת.

5. מסקנה

לסיכום, הסברנו תחילה כיצד להזריק א מַפָּה מקובץ YAML ב- Spring Boot. לאחר מכן, הדגשנו את ההבדל בין @ConfigurationProperties ו @ערך.

כרגיל, קוד המקור המלא של המאמר זמין באתר GitHub.


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