פרופילי אביב

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

במדריך זה נתמקד בהצגת פרופילים באביב.

פרופילים הם מאפיין מרכזי של המסגרת - מה שמאפשר לנו למפות את השעועית שלנו לפרופילים שונים - לדוגמה, dev, מִבְחָן, ו לְדַרבֵּן.

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

2. השתמש @פּרוֹפִיל על שעועית

נתחיל בפשטות ונראה כיצד אנו יכולים לגרום לשעועית להשתייך לפרופיל מסוים. אנו משתמשים ב- @פּרוֹפִיל ביאור - אנו ממפים את השעועית לפרופיל המסוים הזה; ההערה פשוט לוקחת שמות של פרופיל אחד (או מרובה).

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

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

@Component @Profile ("dev") מחלקה ציבורית DevDatasourceConfig

כתמצית מהירה, ניתן להקדים קידומת לשמות פרופילים עם מפעיל NOT, למשל, dev, כדי לא לכלול אותם מפרופיל.

בדוגמה, הרכיב מופעל רק אם dev הפרופיל אינו פעיל:

@Component @Profile ("! Dev") מחלקה ציבורית DevDatasourceConfig

3. הכריזו על פרופילים ב- XML

ניתן להגדיר פרופילים גם ב- XML. ה לתג יש פרופילים תכונה, הלוקחת ערכים המופרדים בפסיקים של הפרופילים הרלוונטיים:

4. הגדר פרופילים

השלב הבא הוא להפעיל ולהגדיר את הפרופילים כך שהשעועית בהתאמה תירשם במיכל.

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

4.1. באופן תכנותי באמצעות WebApplicationInitializer מִמְשָׁק

ביישומי אינטרנט, WebApplicationInitializer ניתן להשתמש בה כדי להגדיר את ServletContext מבחינה תכנתית.

זהו גם מיקום שימושי מאוד להגדרת הפרופילים הפעילים שלנו באופן פרוגרמטי:

המחלקה הציבורית @Configuration MyWebApplicationInitializer מיישם את WebApplicationInitializer {@Override public void onStartup (ServletContext servletContext) זורק ServletException {servletContext.setInitParameter ("spring.profiles.active", "dev"); }}

4.2. באופן תכנותי באמצעות הסביבה ניתנת להגדרה

אנו יכולים גם להגדיר פרופילים ישירות על הסביבה:

@ Enviv פרטית אוטומטית envel; ... env.setActiveProfiles ("someProfile");

4.3. פרמטר הקשר ב web.xml

באופן דומה, אנו יכולים להגדיר את הפרופילים הפעילים ב- web.xml קובץ של יישום האינטרנט, באמצעות פרמטר הקשר:

 contextConfigLocation /WEB-INF/app-config.xml spring.profiles.active dev 

4.4. פרמטר מערכת JVM

ניתן להעביר את שמות הפרופילים גם באמצעות פרמטר מערכת JVM. פרופילים אלה יופעלו במהלך הפעלת היישום:

-Dspring.profiles.active = dev

4.5. משתנה הסביבה

בסביבת יוניקס, ניתן להפעיל פרופילים גם באמצעות משתנה הסביבה:

ייצוא spring_profiles_active = dev

4.6. פרופיל Maven

ניתן להפעיל פרופילי אביב גם באמצעות פרופילי Maven, על ידי המפרט את spring.profiles.active מאפיין תצורה.

בכל פרופיל Maven אנו יכולים להגדיר a spring.profiles.active תכונה:

  dev true prod prod 

ערכו ישמש להחלפת ה- @ [מוגן בדוא"ל] מציין מיקום ב application.properties:

[מוגן בדוא"ל] @

כעת עלינו לאפשר סינון משאבים פנימה pom.xml:

   src / main / resources true ... 

ולצרף א -P פרמטר להחלפת פרופיל Maven שיוחל:

חבילה נקייה mvn -Pprod

פקודה זו תארוז את היישום עבור לְדַרבֵּן פּרוֹפִיל. זה חל גם על spring.profiles.active ערך לְדַרבֵּן ליישום זה כאשר הוא פועל.

4.7. @ActiveProfile במבחנים

בדיקות מקלות מאוד על ציון הפרופילים הפעילים באמצעות ה- @ActiveProfile ביאור להפעלת פרופילים ספציפיים:

@ActiveProfiles ("dev")

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

  1. פרמטר הקשר ב- web.xml
  2. WebApplicationInitializer
  3. פרמטר מערכת JVM
  4. משתנה הסביבה
  5. פרופיל Maven

5. פרופיל ברירת המחדל

כל שעועית שאינה מציינת פרופיל שייכת ל- בְּרִירַת מֶחדָל פּרוֹפִיל.

אביב מספק גם דרך להגדיר את פרופיל ברירת המחדל כאשר אף פרופיל אחר אינו פעיל - באמצעות spring.profiles.default תכונה.

6. קבל פרופילים פעילים

הפרופילים הפעילים של אביב מניעים את התנהגותם של @פּרוֹפִיל ביאור להפעלת / השבתת שעועית. עם זאת, ייתכן שנרצה לגשת לרשימת הפרופילים הפעילים באופן פרוגרמטי.

יש לנו שתי דרכים לעשות את זה, באמצעות סביבה אוֹ spring.active.profile.

6.1. באמצעות סביבה

אנו יכולים לגשת לפרופילים הפעילים מה- סביבה חפץ על ידי הזרקתו:

מחלקה ציבורית ProfileManager {@ סביבה פרטית אוטומטית בסביבה; חלל ציבורי getActiveProfiles () {for (String profileName: environment.getActiveProfiles ()) {System.out.println ("פרופיל פעיל כרגע -" + profileName); }}}

6.2. באמצעות spring.active.profile

לחלופין, נוכל לגשת לפרופילים על ידי הזרקת הנכס spring.profiles.active:

@Value ("$ {spring.profiles.active}") מחרוזת פרטית activeProfile;

הנה, שלנו פעיל פרופיל מִשְׁתַנֶה יכיל את שם הפרופיל הפעיל כעת, ואם יש כמה, הוא יכיל את שמותיהם מופרדים בפסיק.

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

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

@Value ("$ {spring.profiles.active:}") מחרוזת פרטית activeProfile;

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

ואם אנחנו רוצים לגשת לרשימה שלהם בדיוק כמו בדוגמה הקודמת, אנחנו יכולים לעשות זאת על ידי פיצול ה- פעיל פרופיל מִשְׁתַנֶה:

מעמד ציבורי ProfileManager {@Value ("$ {spring.profiles.active:}") פרטי מחרוזת activeProfiles; מחרוזת ציבורית getActiveProfiles () {for (String profileName: activeProfiles.split (",")) {System.out.println ("פרופיל פעיל כרגע -" + profileName); }}}

7. דוגמה: הפרדות תצורות מקורות נתונים נפרדות באמצעות פרופילים

עכשיו, כאשר היסודות אינם מהדרך, בואו נסתכל על דוגמה אמיתית.

שקול תרחיש שבו עלינו לשמור על תצורת מקור הנתונים הן בסביבות הפיתוח והן בסביבות הייצור.

בואו ניצור ממשק משותף DatasourceConfig שצריך ליישם על ידי שתי יישומי מקור הנתונים:

ממשק ציבורי DatasourceConfig {הגדרת חלל ציבורי (); }

להלן התצורה של סביבת הפיתוח:

@Component @Profile ("dev") מחלקה ציבורית DevDatasourceConfig מיישם את DatasourceConfig {@Override התקנת הריק הציבורי () {System.out.println ("הגדרת מקור נתונים לסביבת DEV."); }}

ותצורה לסביבת הייצור:

@Component @Profile ("ייצור") מחלקה ציבורית ProductionDatasourceConfig מיישם את DatasourceConfig {@Override התקנת הריק הציבורי () {System.out.println ("הגדרת מקור נתונים לסביבת PRODUCTION."); }}

עכשיו בואו ניצור בדיקה ונזריק את ממשק DatasourceConfig שלנו; בהתאם לפרופיל הפעיל, אביב יזריק DevDatasourceConfig אוֹ ProductionDatasourceConfig אפונה:

מחלקה ציבורית SpringProfilesWithMavenPropertiesIntegrationTest {@Autowired DatasourceConfig datasourceConfig; setup void setupDatasource () {datasourceConfig.setup (); }}

כאשר dev הפרופיל פעיל, אביב מזריק DevDatasourceConfig חפץ, וכאשר מתקשרים אז להכין() השיטה הבאה היא הפלט:

הגדרת מקור נתונים לסביבת DEV.

8. פרופילים במגף האביב

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

פרמטר האתחול spring.profiles.active, שהוצג בסעיף 4, ניתן להגדיר כמאפיין ב- Spring Boot להגדרת פרופילים פעילים כרגע. זהו מאפיין סטנדרטי ש- Spring Boot יאסוף אוטומטית:

spring.profiles.active = dev

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

SpringApplication.setAdditionalProfiles ("dev");

כדי להגדיר פרופילים באמצעות Maven ב- Spring Boot, אנו יכולים לציין שמות פרופילים תחת spring-boot-maven-plugin ב pom.xml:

  org.springframework.boot spring-boot-maven-plugin dev ... 

ולבצע את מטרת Maven הספציפית למגף האביב:

קפיץ אתחול mvn: לרוץ

אבל התכונה החשובה ביותר הקשורה לפרופילים שמביא Spring Boot היא קבצי מאפיינים ספציפיים לפרופיל. אלה חייבים להיות שם בתבנית יישום- {פרופיל} .כמויות.

Spring Boot יטען אוטומטית את המאפיינים ב- application.properties קובץ לכל הפרופילים, ואלו בפרופילים ספציפיים .נכסים קבצים רק עבור הפרופיל שצוין.

לדוגמה, אנו יכולים להגדיר מקורות נתונים שונים עבור dev ו הפקה פרופילים באמצעות שני קבצים בשם יישומים-dev.properties ו יישומים- ייצור. נכסים:

בתוך ה יישומי ייצור. נכסים אנו יכולים להגדיר MySql מקור מידע:

spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver spring.datasource.url = jdbc: mysql: // localhost: 3306 / db spring.datasource.username = root spring.datasource.password = root

אז נוכל להגדיר את אותם המאפיינים עבור ה- dev פרופיל ב יישומים-dev.properties קובץ, כדי להשתמש בזיכרון H2 מאגר מידע:

spring.datasource.driver-class-name = org.h2.Driver spring.datasource.url = jdbc: h2: mem: db; DB_CLOSE_DELAY = -1 spring.datasource.username = sa spring.datasource.password = sa

בדרך זו אנו יכולים לספק תצורות שונות עבור סביבות שונות.

9. מסקנה

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

לבסוף, אימתנו את הבנתנו בפרופילים בעזרת דוגמה פשוטה אך אמיתית.

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