מדריך ל- @ConfigurationProperties באביב אתחול

1. הקדמה

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

כעת אנו הולכים לחקור את @ConfigurationProperties ביאור בפירוט רב יותר.

2. התקנה

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

 org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASE 

כדי שנוכל לאמת מאפיינים שהוגדרו בקובץ, אנו זקוקים גם להטמעה של JSR-303 ו- מאמת תרדמת שינה הוא אחד מהם.

בואו נוסיף אותו לשלנו pom.xml גם כן:

 org.hibernate hibernate-validator 6.0.16.Final 

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

3. מאפיינים פשוטים

התיעוד הרשמי ממליץ לנו לבודד את מאפייני התצורה ל- POJO נפרדים.

אז נתחיל בכך:

@Configuration @ConfigurationProperties (קידומת = "דואר") מחלקה ציבורית ConfigProperties {private String hostName; נמל אינטר פרטי; מחרוזת פרטית מ; // סטרים וקובעים סטנדרטיים}

אנו משתמשים @תְצוּרָה כך ש- Spring יוצר שעועית אביב בהקשר היישום.

@ConfigurationProperties עובד הכי טוב עם מאפיינים היררכיים שלכולם אותה קידומת; לכן, אנו מוסיפים קידומת של דוֹאַר.

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

הערה: אם איננו משתמשים @תְצוּרָה ב- POJO, אז אנחנו צריכים להוסיף @EnableConfigurationProperties (ConfigProperties.class) בשיעור יישומי האביב הראשי כדי לאגד את המאפיינים ל- POJO:

@SpringBootApplication @EnableConfigurationProperties (ConfigProperties.class) מחלקה ציבורית EnableConfigurationDemoApplication {main public static void (String [] args) {SpringApplication.run (EnableConfigurationDemoApplication.class, args); }}

זהו זה! אביב יחייב אוטומטית כל מאפיין שהוגדר בקובץ הנכסים שלנו עם קידומת דוֹאַר ושם זהה לאחד השדות ב ConfigProperties מעמד.

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

mail.hostName mail.hostname mail.host_name mail.host-name mail.HOST_NAME 

לכן, אנו יכולים להשתמש בקובץ המאפיינים הבא כדי להגדיר את כל השדות:

# מאפיינים פשוטים [מוגן באמצעות דוא"ל] mail.port = 9000 [מוגן באמצעות דוא"ל] 

3.1. מגף קפיץ 2.2

החל באביב אתחול 2.2, האביב מוצא ונרשם @ConfigurationProperties שיעורים באמצעות סריקת מסלול. לָכֵן, אין צורך להוסיף הערות לשיעורים כאלה @רְכִיב (ומטא-הערות אחרות כמו @Configuration),או אפילו להשתמש ב- @EnableConfigurationProperties:

@ConfigurationProperties (קידומת = "דואר") מחלקה ציבורית ConfigProperties {private String hostName; נמל אינטר פרטי; מחרוזת פרטית מ; // סטרים וקובעים סטנדרטיים} 

סורק השבילים מופעל על ידי @ SpringBootApplication מוצא את ConfigProperties בכיתה, למרות שלא הערנו את השיעור הזה עם @רְכִיב.

בנוסף, אנו יכולים להשתמש ה @ConfigurationPropertiesScan ביאור לסריקת מיקומים מותאמים אישית עבור שיעורי נכס תצורה:

@SpringBootApplication @ConfigurationPropertiesScan ("com.baeldung.configurationproperties") class public EnableConfigurationDemoApplication {main static void main (String [] args) {SpringApplication.run (EnableConfigurationDemoApplication.class, args); }}

בדרך זו אביב יחפש שיעורי נכס תצורה רק ב com.baeldung.properties חֲבִילָה.

4. נכסים מקוננים

יכול להיות שיש לנו נכסים מקוננים רשימות, מפות, ו שיעורים.

בואו ניצור חדש אישורים בכיתה לשימוש בכמה נכסים מקוננים:

אישורי כיתות ציבוריות {פרטי מחרוזת authMethod; שם משתמש פרטי מחרוזת; סיסמת מחרוזת פרטית; // סטרים וקובעים סטנדרטיים}

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

מחלקה ציבורית ConfigProperties {מארח מחרוזת פרטי; נמל אינטר פרטי; מחרוזת פרטית מ; רשימת פרטי defaultRecipients; מפה פרטית נוספת כותרות; אישורי פרטי תעודה; // סטרים וקובעים סטנדרטיים}

קובץ המאפיינים הבא יגדיר את כל השדות:

# מאפיינים פשוטים [מוגן באמצעות דואר אלקטרוני] mail.port = 9000 [מוגן באמצעות דוא"ל] # מאפייני רשימה mail.defaultRecipients [0] [email protected] mail.defaultRecipients [1] [email protected] # Map Properties Mail.additionalHeaders.redelivery = דואר אמיתי .additionalHeaders.secure = נכסי נכונות #Object mail.credentials.username = john mail.credentials.password = סיסמה mail.credentials.authMethod = SHA1

5. שימוש @ConfigurationProperties על @אפונה שיטה

אנחנו יכולים גם להשתמש ב- @ConfigurationProperties ביאור ב @אפונה-שיטות המוענקות.

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

בואו ניצור פשוט פריט בכיתה בה נשתמש בדוגמה הבאה:

מחלקה ציבורית פריט {פרטי מחרוזת; גודל פרטי פרטי; // סטרים וקובעים סטנדרטיים}

עכשיו בואו נראה כיצד נוכל להשתמש @ConfigurationProperties על @אפונה שיטה לאגד מאפיינים חיצוניים ל- פריט למשל:

@Configuration public class ConfigProperties {@Bean @ConfigurationProperties (קידומת = "פריט") פריט ציבורי () {להחזיר פריט חדש (); }}

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

6. אימות נכס

@ConfigurationProperties מספק אימות של מאפיינים בתבנית JSR-303. זה מאפשר כל מיני דברים מסודרים.

לדוגמא, בואו נכין את שם מארח חובה לרכוש:

@NotBlank פרטי מחרוזת hostName;

הבא, בואו נכין את authMethod מאפיין באורך של 1 עד 4 תווים:

@Length (max = 4, min = 1) מחרוזת authMethod פרטית;

אז ה נמל נכס בין השנים 1025 עד 65536:

@Min (1025) @Max (65536) יציאת אינטראקציה פרטית; 

סוף - סוף, ה מ על הנכס להתאים לפורמט של כתובת דוא"ל:

@Pattern (regexp = "^ [a-z0-9 ._% + -] [דוא"ל מוגן] [a-z0-9 .-] + \. [Az] {2,6} $") מחרוזת פרטית מ ; 

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

אם אחת מאימותים אלה נכשלת, היישום הראשי לא יתחיל עם IllegalStateException.

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

7. המרת נכס

@ConfigurationProperties תומך בהמרה עבור מספר סוגים של קשירת המאפיינים לשעועית המתאימה להם.

7.1. מֶשֶׁך

נתחיל בבדיקת המרת נכסים ל- מֶשֶׁך חפצים.

כאן יש לנו שני שדות סוג מֶשֶׁך:

@ConfigurationProperties (קידומת = "המרה") סוג ציבורי PropertyConversion {פרטי משך זמןInDefaultUnit; זמן משך פרטיInNano; ...}

זהו קובץ המאפיינים שלנו:

conversion.timeInDefaultUnit = 10 conversion.timeInNano = 9ns

כתוצאה מכך, השדה timeInDefaultUnit יהיה ערך של 10 אלפיות השנייה timeInNano יהיה בעל ערך של 9 ננו-שניות.

היחידות הנתמכות הן ns, us, ms, s, m, h ו ד עבור ננו-שניות, מיקרו-שניות, אלפיות השנייה, שניות, דקות, שעות וימים, בהתאמה.

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

אנו יכולים גם לעקוף את יחידת ברירת המחדל באמצעות @DurationUnit:

@DurationUnit (ChronoUnit.DAYS) זמן משך זמןInDays;

זהו המאפיין המתאים:

conversion.timeInDays = 2

7.2. DataSize

באופן דומה, Spring Boot @ConfigurationProperties תומך DataSize סוג המרה.

בואו נוסיף שלושה שדות מסוג DataSize:

פרטי DataSize sizeInDefaultUnit; פרטי DataSize sizeInGB; @DataSizeUnit (DataUnit.TERABYTES) DataSize פרטיInTB;

אלה המאפיינים המתאימים:

conversion.sizeInDefaultUnit = 300 conversion.sizeInGB = 2GB conversion.sizeInTB = 4

במקרה זה, sizeInDefaultUnit הערך יהיה 300 בתים, שכן יחידת ברירת המחדל היא בתים.

היחידות הנתמכות הן B, KB, MB, GB, ו שַׁחֶפֶת. אנו יכולים גם לעקוף את יחידת ברירת המחדל באמצעות @ DataSizeUnit.

7.3. המותאם אישית מֵמִיר

אנחנו יכולים גם להוסיף את המנהג שלנו מֵמִיר לתמיכה בהמרת נכס לסוג מחלקה ספציפי.

בואו נוסיף שיעור פשוט עוֹבֵד:

שכבה ציבורית עובד {שם מחרוזת פרטי; משכורת כפולה פרטית; }

לאחר מכן ניצור ממיר מותאם אישית להמרת מאפיין זה:

המרה.עובד = ג'ון, 2000

אנו להמיר אותו לקובץ מסוג עוֹבֵד:

עובד שכיר פרטי;

נצטרך ליישם את מֵמִיר ממשק, אם כן להשתמש @ConfigurationPropertiesBinding ביאור לרישום המנהג שלנו מֵמִיר:

@Component @ConfigurationPropertiesBinding class public EmployeeConverter מיישם ממיר {@Override עובד שכיר ממיר (מחרוזת מ) {String [] data = from.split (","); להחזיר עובד חדש (נתונים [0], Double.parseDouble (נתונים [1])); }}

8. בלתי ניתנים לשינוי @ConfigurationProperties כריכה

החל באביב אתחול 2.2 אנחנו יכולים להשתמש ב- @ConstructorBinding ביאור כדי לאגד את מאפייני התצורה שלנו.

זה בעצם אומר את זה @ConfigurationPropertiesשיעורים שלא הוענקו עשויים להיות בלתי ניתנים לשינוי.

@ConfigurationProperties (קידומת = "mail.credentials") @ConstructorBinding class public ImmutableCredentials {פרטית סופית String authMethod; סופי פרטי שם משתמש מחרוזת; סיסמת מחרוזת פרטית סופית; ImmutableCredentials ציבוריים (String authMethod, String name user, String string) {this.authMethod = authMethod; this.username = שם משתמש; this.password = סיסמה; } מחרוזת ציבורית getAuthMethod () {return authMethod; } ציבורי מחרוזת getUsername () {שם משתמש להחזיר; } ציבורי מחרוזת getPassword () {סיסמה להחזיר; }}

כפי שאנו רואים, בעת השימוש @ConstructorBinding, עלינו לספק לבנאי את כל הפרמטרים שברצוננו לקשור.

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

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

9. מסקנה

במאמר זה בחנו את @ConfigurationProperties ביאור והדגיש כמה מהתכונות השימושיות שהוא מספק, כמו כריכה נינוחה ואימות שעועית.

כרגיל, הקוד זמין ב- Github.


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