5 סיבות טובות לבחור ב-Spring Framework

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

תמונה: pexels

מאת שרית פנחס, Senior Software Engineer , Duda

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

אם כן, התשובה לשאלה באיזה Framework כדאי להשתמש (אם בכלל) היא – תלוי בהקשר.

למה להשתמש ב-Spring?

Spring היא אחת ה-Frameworks הכי שכיחות ב-Java והיא מאפשרת לנו לכתוב אפליקציות מורכבות בקלות. אחת היכולות המרכזיות שלה היא Dependency Injection, שימוש האפליקציה באובייקטים מוזרקים בזמן ריצה. יכולת זו מאפשרת לכתוב בדיקות בפשטות (Spring מעודדת בכך Test Driven Development).

Spring מחולקת למודולים, כך שניתן להשתמש רק בפרויקטים הרלוונטיים לאפליקציה שלנו, היא מלווה בתיעוד ומדריכים רבים והיא נתמכת על ידי הקהילה. זהו קוד פתוח בעל היסטוריה ארוכה. Spring ממשיכה להתפתח ולהיות מתוחזקת, והיא הפכה להיות פתרון ברירת המחדל להרבה בעיות נפוצות שנתקלים בהן בעת פיתוח אפליקציה ב-scale גדול. הנה עוד 5 סיבות לבחור בה:

1 – Authorization
Spring Security הוא פרויקט המאפשר מתן הרשאות ברמת המתודה או המחלקה. ההרשאות יכולות להינתן ל-roles מסוימים בעזרת השימוש בביטוי hasRole, והבדיקה אם המשתמש מורשה או לא יכולה להתבצע לפני הכניסה למתודה או אחריה (PreAuthorize או PostAuthorize). בעזרת יכולות אלו ניתן להגדיר security annotation מותאם אישית ובכך להפריד את ניהול האבטחה מהקוד עצמו בצורה טובה יותר.

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasRole('ADMIN')")
public @interface IsAdmin {
}
Defining IsAdmin security meta-annotation with Spring security expression hasRole and annotation PreAuthorize
@IsAdmin
public String getWhatJesusQuintanaWouldSay() {
    // ...
}
Using the security meta-annotation

2 – עבודה עם הענן
Spring מספקת לנו אבסטרקציה לעבודה עם הענן. אבסטרקציה זו מאפשרת לנו להימנע משימוש בפרטי היישום הספציפי של ענן מסוים. כך לדוגמה, כדי לאחזר קבצים ממקום האחסון שלהם בענן, נשתמש ב-Resource של Spring במקום להשתמש באובייקט Storage עבור Google Cloud או AmazonS3 עבור AWS. כך במקרה של החלפת ענן, יהיה צורך לשנות רק את הקונפיגורציה, ה-dependency וה-properties של האפליקציה מבלי לשנות דבר בקוד.

@Service
public class CloudStorageService {

    private final ResourceLoader resourceLoader;

    public CloudStorageService(ResourceLoader resourceLoader) {
        this.resourceLoader = resourceLoader;
    }

    public String downloadFile(String filePath) throws IOException {
        Resource resource = resourceLoader.getResource(filePath);
        return StreamUtils.copyToString(resource.getInputStream(), Charset.defaultCharset());
    }

}
CloudStorageService is cloud agnostic. ResourceLoader can download files from several cloud vendors, its implementation will be determined by the the Spring dependency and the filePath

3 – Actuator
Spring Actuator הוא פרויקט המספק יכולות המאפשרות לנטר ולנהל את האפליקציה בזמן שהיא עולה ל-production, לאסוף מטריקות (על כך בסעיף הבא) ולהבין את מצב מסדי הנתונים. ה-actuator חושף HTTP endpoints או JMX beans מהם ניתן לקבל מידע כמו free disk space או רשימה של כל ה-scheduled tasks. מלבד ה-endpoints הקיימים, ניתן ליצור endpoints מותאמים אישית.

JMX beans view in jconsole. There are other endpoints that require additional dependencies, i.e.: session and integrationgraph

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

Exposing 2 endpoint(s) beneath base path ‘/actuator’ – health and info HTTP endpoints are exposed by default

ניתן לפנות לחלק מה-endpoints לא רק על ידי קריאת GET לקבל מידע אלא גם על ידי קריאת POST או DELETE לביצוע פעולות כמו סגירת האפליקציה כולה על ידי קריאת POST ל-shutdown endpoint.

4 – מטריקות
Micrometer הוא facade (ממשק המסווה קוד מורכב יותר) עבור מטריקות. הוא תומך במספר מערכות ניטור ביניהן Graphite, InfluxDB ו-Prometheus ומאפשר ליצור מטריקות כגון Counter, Gauge, Timer ו-DistributionSummary לקבלת מידע על התפלגות אירועים. המטריקות הן מולטי מימדיות, כלומר ניתן לשייך למטריקה אחת יותר מתיוג בודד ובכך לייצר חיתוכים רב מימדיים על המידע.

כאמור, כדי להשתמש ולאסוף את המטריקות על ידי ה-Micrometer יש להשתמש בפרויקט Spring Actuator.

Metrics in / actuator/ prometheus endpiont

כמו כן, כיוון שמספר רב של מערכות הניטור הנתמכות (כדוגמת Graphite ו-InfluxDB) יכולות להוות מקור נתונים ל-Grafana, ניתן ליצור ייצוג גרפי למטריקות ולהוסיף עליו התראות במגוון מערכות כמו Slack, Kafka ו-PagerDudy.

Grafana’s graph showing Counter metric using prometheus as data source

5 – קונפיגורציה
Spring Cloud Config מאפשר לאחסן ולהגיש קונפיגורציה במערכת מבוזרת בתצורת client/server. הקונפיגורציה עצמה נשמרת בשרת כדוגמת Git, Vault, AWS S3 (ברירת המחדל) ו-Redis ותומכת בהצפנה ופענוח של הערכים.

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

כך ניתן ליצור ניהול קונפיגורציה מרכזי במערכת מבוזרת בתצורת Client/Server ושינוי ערכים בזמן הריצה של האפליקציה.

בונוס
בזמן עליית האפליקציה, מופיע הכיתוב המוכר Spring ב-Console.

Spring banner on the console

ניתן לשנות כיתוב זה על ידי הוספת קובץ banner.txt לתיקיית Resources עם טקסט חופשי.

Banner Text: The Dude, Banner Font: doh

כאמור, Spring היא אחת מתשתיות התוכנה הכי נפוצות ב-Java. השכיחות שלה גדלה מיום ליום וכך גם היכולות הנרחבות שלה. לכן, כדאי להכיר אותה כדי שנוכל להחליט האם השימוש בה הוא הפתרון היעיל והנכון לאתגר העומד בפנינו.

הכתבה בחסות Duda

Duda היא פלטפורמת ה-SaaS המובילה עבור חברות המציעות שירותי בניית אתרים. היא משרתת מעל ל-23,000 חברות ברחבי העולם - החל מפרילנסרים וסוכנויות דיגיטל, ועד לחברות ענק. יותר מ-14 מיליון אתרים נבנו עם Duda.
הפלטפורמה מאפשרת לייצר אתרים רספונסיביים, עשירים בפיצ'רים מתקדמים ואינטגרציות. בנוסף, היא מספקת White Labeling, כלים לעבודה צוותית ולניהול לקוחות. השחקנים הגדולים בתעשייה עובדים עם Duda, ביניהם Solocal, ItaliaOnline, Thryv, AppFolio ו- IONOS. לחברה מטה בפאלו אלטו ומשרדים בקולורדו, בברזיל ובמרכז תל-אביב. עד היום החברה גייסה $50MM, מתוכם $25MM ב-2019.

Avatar

כתב אורח

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

הגב

30 תגובות על "5 סיבות טובות לבחור ב-Spring Framework"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

* היי, אנחנו אוהבים תגובות!
תיקונים, תגובות קוטלות וכמובן תגובות מפרגנות - בכיף.
חופש הביטוי הוא ערך עליון, אבל לא נוכל להשלים עם תגובות שכוללות הסתה, הוצאת דיבה, תגובות שכוללות מידע המפר את תנאי השימוש של Geektime, תגובות שחורגות מהטעם הטוב ותגובות שהן בניגוד לדין. תגובות כאלו יימחקו מייד.

סידור לפי:   חדש | ישן | הכי מדורגים
יוני
Guest

כתבה מעניינת מאוד… תודה

דנה
Guest

מעולה

אור
Guest

כתבה טובה ונכונה

צחי
Guest

הייתי מזכיר גם את הסבא. Jboss או wildfly.

Tie
Guest

כתבה מצוינת

Jordan
Guest

כתבה מעולה נהנתי לקרוא

רנן
Guest

סקירה מקיפה, כל הכבוד ☘️

יאיר
Guest

שכחת refresh api של actuator..

ארז
Guest

לגמרי בטו דו ליסט שלי

צורי
Guest

הפריימוורק המועדף עליי, לא מקבל מספיק קרדיט

משתמש אובונטו
Guest

לא רוצה לקלקל את החגיגה אבל הכתבה מתאימה לשנת 2005:
מה זה פרימוורק, מה זה ספרינג, DI, וניטור JMX.
אבל תמיד טוב להזכר בנוסטלגיה.

אגב, עבדתי בSAP עם המייסדים של דודה. סה”כ אנשים טובים.

קוקי
Guest

אז מה הסטאק שלך חבר?

משתמש אובונטו
Guest

כרגע אני עם node.js בעיקר.
אגב, אין שום דבר רע בג’אווה וספרינג. פלטפורמה וותיקה אבל לא בהכרח מיושנת. פשוט אני לא רואה למה לפרסם כתבה על משהו כל כך וותיק. הפיצ’ר היחיד שחידש לי היה החלפת הכיתוב בעליה של ספרינג בוט.

מישהו
Guest

אחלה כתבה.
יש גם סטודנטים ועובדים מתחילים שקוראים את הדברים האלה וזה נותן חומר לקריאה/מחשבה/הבנה כמה לא מלמדים אותנו כלום וצריך ללמוד הכל לבד בסוף.

עידן
Guest

אדיר, לא הכרתי חלק מהדברים.

Matt
Guest

תאכלס אין כמו ספרינג

נרו
Guest

רק לא ספרינג!
פריימוורק מוצף וגדוש במלא פיצ’רים לא רלוונטיים, שמעודד אנשים לכתוב קוד לא סטנדרטי (פילד אינג’קשן).
בתקופת המיקרוסרביסים ממש לא חייבים ספרינג, גם ככה הפרויקט מספיק קטן שלא צריך IoC, תבנו את הגרף ידנית, כולה כתבתם 10 שורות קוד.
ספרינג פותר בעיות שכבר לא קיימות היום, ומעודד אנשים להיות מתכנתי ספרינג במקום מתכנתי ג’אווה. זה פריימוורק מאוד opinionated, שמקריב חלק משמעותי מעולם ה OOP, לא ברור לטובת מה.
תעשו לעצמכם טובה ותבנו פרויקט בלי ספרינג, ותראו שזה הרבה יותר פשוט ממה שחשבתם.

אלי
Guest

אין על ספרינג

דני
Guest

הפריע יורק המועדף עלי בכל אפליקציה שאני כותב. כתבה מעולה

יואל7
Guest

כותב בספרינג הרבה שנים ועדיין הצלחתם לחדש לי

אבישי
Guest

ספרינג פשוט תת רמה. תיכף תתפייטו על הייברנייט. אין מילים.

פינוקי
Guest

כנראה שלפחות חצי מהמגיבים הינם חברים של המחברת, כי אחרת לא יכול להבין את התגובות האוהדות. הכתבה שטחית ביותר, עם אי דיוקים (actuator? הוא בכלל שייך לSpring Boot שלא מוזכר בכתבה והוא החלק המעניין יותר בSpring) ונראה כאילו הכותבת פשוט מקורבת לאנשי האתר כי לא ברור לי איך נתנו לה לכתוב פה (גם לפי קו״ח שלה היא איננה מתכנתת מנוסה מאוד)

Tal
Guest

Spring is truly the best. Great article!

עדי
Guest

אלופה!

נתנאל
Guest

וואלה הצלחתם לחדש לי

אלי
Guest

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

אחד
Guest

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

דניאל
Guest

quarkus.io זה הדבר האמיתי בעולם הjava.

yuval
Guest

Great Article

פפה
Guest

לייק גדול

wpDiscuz

תגיות לכתבה: