@PropertySource עם קבצי YAML באתחול האביב
1. סקירה כללית
במדריך מהיר זה, נראה כיצד לקרוא קובץ מאפיינים של YAML באמצעות ה- @PropertySource ביאור באביב המגף.
2. @PropertySource ו יאמל פוּרמָט
ל- Spring Boot יש תמיכה נהדרת בתצורה חיצונית. כמו כן, ניתן להשתמש בדרכים ובפורמטים שונים כדי לקרוא את המאפיינים ביישום Spring Boot מחוץ לקופסה.
למרות זאת, כברירת מחדל, @PropertySource לא טוען קבצי YAML. עובדה זו מוזכרת במפורש בתיעוד הרשמי.
אז אם אנחנו רוצים להשתמש ב- @PropertySource הערה ביישום שלנו, עלינו לעמוד בתקן נכסים קבצים. או שאנחנו יכולים ליישם את חלק הפאזל החסר בעצמנו!
3. מותאם אישית PropertySourceFactory
החל באביב 4.3, @PropertySource מגיע עם בית חרושת תְכוּנָה. אנחנו יכולים לעשות בו שימוש ל לספק את היישום המותאם אישית שלנו של PropertySourceFactory, אשר יטפל בעיבוד הקבצים YAML.
זה קל יותר ממה שזה נשמע! בואו נראה כיצד לעשות זאת:
מחלקה ציבורית YamlPropertySourceFactory מיישמת PropertySourceFactory {@Override public PropertySource createPropertySource (שם מחרוזת, EncodedResource encodedResource) זורק IOException {YamlPropertiesFactoryBean מפעל = YamlPropertiesFactoryBean חדש (); factory.setResources (encodedResource.getResource ()); מאפייני מאפיינים = factory.getObject (); להחזיר PropertiesPropertySource חדשים (encodedResource.getResource (). getFilename (), מאפיינים); }}
כפי שאנו רואים, זה מספיק ליישם יחיד createPropertySource שיטה.
ביישום המותאם אישית שלנו, ראשית, השתמשנו ב- YamlPropertiesFactoryBean להמיר את המשאבים בפורמט YAML ל- java.util. נכסים לְהִתְנַגֵד.
ואז פשוט החזרנו מופע חדש של ה- PropertiesPropertySource , שהוא עטיפה המאפשרת לאביב לקרוא את המאפיינים המנותחים.
4. @PropertySource ו יאמל בִּפְעוּלָה
בואו כעת נחבר את כל החלקים ונראה כיצד להשתמש בהם בפועל.
ראשית, בואו ניצור קובץ YAML פשוט - foo.yml:
yaml: שם: כינויים foo: - abc - xyz
לאחר מכן, בואו ליצור מחלקת מאפיינים עם @ConfigurationProperties והשתמש במנהג שלנו YamlPropertySourceFactory:
@Configuration @ConfigurationProperties (קידומת = "yaml") @PropertySource (value = "classpath: foo.yml", factory = YamlPropertySourceFactory.class) מחלקה ציבורית YamlFooProperties {שם מחרוזת פרטי; פרטי כינויים לרשימה; // גטר סטרים סטרים}
ולבסוף, בואו נוודא שהמאפיינים מוזרקים כראוי:
@RunWith (SpringRunner.class) @SpringBootTest מחלקה ציבורית YamlFooPropertiesIntegrationTest {@ YamlFooProperties פרטיות מאושרות yamlFooProperties; @Test הציבור בטל כאשר FactoryFrovidedThenYamlPropertiesInjected () {assertThat (yamlFooProperties.getName ()). IsEqualTo ("foo"); assertThat (yamlFooProperties.getAliases ()). containExactly ("abc", "xyz"); }}
5. מסקנה
לסיכום, במדריך מהיר זה הראינו לראשונה כמה קל ליצור מותאם אישית PropertySourceFactory . לאחר מכן, הצגנו כיצד להעביר יישום מותאם אישית זה ל- @PropertySource באמצעות שלה בית חרושת תְכוּנָה.
כתוצאה מכך, הצלחנו לטעון בהצלחה את קובץ המאפיינים YAML ליישום Spring Boot שלנו.
כרגיל, כל דוגמאות הקוד זמינות ב- GitHub.