תצורת פרויקט עם אביב
תוכן עניינים
- 1. התצורה חייבת להיות ספציפית לסביבה
- 2. ה .נכסים קבצים לכל סביבה
- 3. תצורת האביב
- 4. הגדרת הנכס בכל סביבה
- 5. בדיקות ומייבן
- 6. ממשיכים הלאה
- 7. סיכום
1. התצורה חייבת להיות ספציפית לסביבה
התצורה חייבת להיות ספציפית לסביבה - זו פשוט עובדת חיים. אם זה לא היה המקרה, אז זה לא היה תצורה ואנחנו רק הקשיחו ערכים בקוד.
ליישום אביב ישנם מספר פתרונות בהם תוכלו להשתמש - החל בפתרונות פשוטים ועד לחלופות מורכבות במיוחד.
אחד הפתרונות הנפוצים והיישרים יותר הוא שימוש בגמישות קבצי מאפיינים ותמיכת נכסים מהשורה הראשונה הניתנת על ידי אביב.
כהוכחה למושג, למטרות מאמר זה, נבחן סוג מאפיין ספציפי אחד - תצורת מסד הנתונים. זה הגיוני לחלוטין להשתמש בסוג אחד של תצורת מסד נתונים לייצור, אחר לבדיקה ועוד אחד לסביבת dev.
2. ה .נכסים קבצים לכל סביבה
נתחיל בהוכחת הרעיון שלנו - על ידי הגדרת הסביבות אליהן אנו רוצים למקד:
- Dev
- הַצָגָה
- הפקה
הבא - בואו ניצור 3 קבצי מאפיינים - אחד לכל אחת מהסביבות האלה:
- נכסי התמדה- dev
- התמדה- staging. נכסים
- ייצור התמדה.קניינים
ביישום Maven טיפוסי, אלה יכולים להתגורר src / main / resources, אבל היכן שהם יהיו, הם יצטרכו להיות זמין על מסלול הכיתה כאשר האפליקציה נפרסת.
Sidenote חשוב - לאחר שכל קבצי המאפיינים נמצאים תחת בקרת גרסאות הופכת את התצורה להרבה יותר שקופה ושחזור. זה מנוגד להציב את התצורות בדיסק איפשהו ופשוט להפנות אליהם את האביב.
3. תצורת האביב
באביב נכלול את הקובץ הנכון על בסיס הסביבה:
ניתן לעשות זאת כמובן גם עם תצורת Java:
@PropertySource ({"classpath: persistence - $ {envTarget: dev} .properties"})
גישה זו מאפשרת את הגמישות שיש בה מספר רב *.נכסים קבצים עבור מטרות ספציפיות וממוקדות. לדוגמא - במקרה שלנו, תצורת האביב של התמדה מייבאת את מאפייני ההתמדה - וזה הגיוני לחלוטין. תצורת האבטחה תייבא מאפיינים הקשורים לאבטחה וכן הלאה.
4. הגדרת הנכס בכל סביבה
המלחמה הסופית, הניתנת לפריסה יכיל את כל קבצי המאפיינים - להתמדה, שלוש הגרסאות של מאפייני התמדה - *. מכיוון שהקבצים נקראים בפועל באופן שונה, אין חשש לכלול בטעות את הקובץ הלא נכון. נקבע ה envTarget מִשְׁתַנֶה וכך בחר את המופע הרצוי מבין הגרסאות הקיימות המרובות.
ה envTarget משתנה ניתן להגדיר במערכת ההפעלה / בסביבה או כפרמטר לשורת הפקודה JVM:
-DenvTarget = dev
5. בדיקות ומייבן
לבדיקות אינטגרציה שדורשות הפעלת התמדה - פשוט נקבע את ה- envTarget מאפיין ב- pom.xml:
org.apache.maven.plugins maven-surefire-plugin h2_test
המקביל התמדה- h2_test.properties ניתן למקם את הקובץ src / test / resources כדי שזה יהיה לשמש רק לבדיקה ולא נכלל ונפרס ללא צורך עם המלחמה בזמן הריצה.
6. ממשיכים הלאה
ישנן מספר דרכים לבנות גמישות נוספת לפתרון זה במידת הצורך.
דרך אחת כזו היא להשתמש ב- קידוד מורכב יותר לשמות מקבצי המאפיינים, תוך ציון לא רק הסביבה בה יש להשתמש, אלא גם מידע נוסף (כגון ספק ההתמדה). לדוגמה, אנו עשויים להשתמש בסוגי המאפיינים הבאים: התמדה- h2. נכסים, נכסי התמדה- mysql או, אפילו יותר ספציפי: התמדה- dev_h2. נכסים, התמדה- staging_mysql. נכסים, התמדה- producttion_amazonRDS.כמויות.
היתרון של אמנת שמות כזו - והיא רק כינוס מכיוון ששום דבר לא משתנה בגישה הכוללת - זה פשוט שקיפות. עכשיו מתבהר הרבה יותר מה התצורה עושה רק על ידי התבוננות בשמות:
- התמדה- dev_h2. נכסים: ספק ההתמדה עבור dev הסביבה היא מאגר H2 קל משקל בזיכרון
- התמדה- staging_mysql. נכסים: ספק ההתמדה עבור הַצָגָה סביבה היא מופע של MySQL
- התמדה-ייצור_מאזון_רדס.פרופרטיה: ספק ההתמדה עבור הפקה הסביבה היא אמזון RDS
7. מסקנה
מאמר זה דן בפתרון גמיש לביצוע תצורה ספציפית לסביבה באביב. פתרון חלופי באמצעות פרופילים ניתן למצוא כאן.
את יישום הפיתרון ניתן למצוא בפרויקט GitHub - זהו פרויקט מבוסס Maven, כך שיהיה קל לייבא ולהפעיל אותו כפי שהוא.