מבוא ל- Dropwizard

ג'אווה טופ

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

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

Dropwizard היא מסגרת Java פתוחה המשמשת לפיתוח מהיר של שירותי רשת RESTful בעלי ביצועים גבוהים. הוא אוסף כמה ספריות פופולריות כדי ליצור את החבילה הקלה. הספריות העיקריות שבהן היא משתמשת הן ג'טי, ג'רזי, ג'קסון, JUnit וגויאבה. יתר על כן, היא משתמשת בספרייה משלה בשם Metrics.

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

2. תלות Maven

ראשית, ה dropwizard-core התלות היא כל מה שאנחנו צריכים על מנת ליצור את השירות שלנו. בואו נוסיף אותו לשלנו pom.xml:

 io.dropwizard dropwizard-core 2.0.0 

3. תצורה

כעת ניצור את הכיתות הדרושות הדרושות להפעלת כל יישום Dropwizard.

יישומי Dropwizard מאחסנים מאפיינים בקבצי YML. לכן, ניצור את הקדמה- config.yml קובץ בספריית המשאבים:

גודל גודל: 5

אנו יכולים לגשת לערכים בקובץ זה על ידי יצירת מחלקה שמתארכת io.dropwizard.Configuration:

מחלקה ציבורית BasicConfiguration מרחיבה את התצורה {@NotNull final final int defaultSize; @JsonCreator ציבורי BasicConfiguration (@JsonProperty ("defaultSize") int defaultSize) {this.defaultSize = defaultSize; } public int getDefaultSize () {return defaultSize; }}

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

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

class class IntroductionApplication מרחיב את היישום {public static void main (String [] args) זורק Exception {new IntroductionApplication (). run ("server", "הקדמה-config.yml"); } @Override הפעלת חלל ציבורי (BasicConfiguration basicConfiguration, סביבת סביבה) {// שיעורי רישום} @Override חלל ציבורי מאותחל (Bootstrap bootstrap) {bootstrap.setConfigurationSourceProvider (חדש ResourceConfigurationSourceProvider ()); super.initialize (bootstrap); }}

ראשית, ה רָאשִׁי שיטה אחראית להפעלת היישום. יכולנו לעבור את טוען אל ה לָרוּץ או למלא אותה לבד.

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

יתר על כן, ה לְאַתחֵל שיטה מגדירה את ספק התצורה ל- ResourceConfigurationSourceProvider, המאפשר ליישום למצוא קובץ תצורה נתון בספריית המשאבים. אין חובה לבטל שיטה זו.

לבסוף, לָרוּץ השיטה מאפשרת לנו לגשת לשני סביבה וה BaseConfiguration, בה נשתמש בהמשך מאמר זה.

4. משאב

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

מותג בכיתה ציבורית {גמר פרטי מזהה ארוך; פרטי סופי מחרוזת; // כל בנאי ויכוחי הטענות}

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

סוג ציבורי BrandRepository {private final List מותגים; BrandRepository ציבורי (מותגי רשימה) {this.brands = ImmutableList.copyOf (מותגים); } רשימה ברשימה ציבורית findAll (גודל int) {return brands.stream () .limit (size) .collect (Collectors.toList ()); } public findById (Long id) {return brands.stream () .filter (brand -> brand.getId (). שווה (id)) .findFirst (); }}

בנוסף, הצלחנו להשתמש ב- ImmutableList מגויאבה כי זה חלק מ- Dropwizard עצמו.

שלישית, ניצור BrandResource מעמד. אשף Dropwizard משתמש ב- JAX-RS כברירת מחדל כאשר ג'רזי היא הטמעה. לכן, נשתמש בהערות ממפרט זה כדי לחשוף את נקודות הקצה של REST API שלנו:

@Path ("/ brands") @Produces (MediaType.APPLICATION_JSON) מחלקה ציבורית BrandResource {private final int defaultSize; סופי פרטי BrandRepository brandRepository; BrandResource ציבורי (int defaultSize, BrandRepository brandRepository) {this.defaultSize = defaultSize; this.brandRepository = brandRepository; } @GET רשימת ציבורים getBrands (@QueryParam ("גודל") גודל אופציונלי) {return brandRepository.findAll (size.orElse (defaultSize)); } @GET @Path ("/ {id}") מותג ציבורי getById (@PathParam ("id") מזהה ארוך) {return brandRepository .findById (id) .orElseThrow (RuntimeException :: new); }}

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

לבסוף נרשם BrandResource בתוך ה מבוא יישום מעמד. על מנת לעשות זאת, בואו ליישם את לָרוּץ שיטה:

@ עקוף ריצת חלל ציבורית (BasicConfiguration basicConfiguration, סביבת סביבה) {int defaultSize = basicConfiguration.getDefaultSize (); BrandRepository brandRepository = BrandRepository חדש (initBrands ()); BrandResource brandResource = BrandResource חדש (defaultSize, brandRepository); הסביבה .jersey () .register (brandResource); }

יש לרשום את כל המשאבים שנוצרו בשיטה זו.

5. הפעלת יישום

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

ראשית, נגדיר את הפרויקט שלנו לבניית קובץ JAR באמצעות ה- תוסף צל-maven:

 org.apache.maven.plugins תוסף Maven-Shade נכון *: * META-INF / *. SF META-INF / *. DSA META-INF / *. חבילת RSA צל com.baeldung.dropwizard. הקדמה. מבוא יישום 

זו התצורה המוצעת של התוסף. בנוסף, כללנו את הדרך למחלקה הראשית שלנו ב אֵלֵמֶנט.

לבסוף נבנה את היישום עם Maven. ברגע שיש לנו את קובץ ה- JAR שלנו, נוכל להריץ את היישום:

java -jar target / dropwizard-0.0.1-SNAPSHOT.jar

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

לאחר מכן, יומן המסוף אמור להסתיים ב:

מידע [2020-01-08 18: 55: 06,527] org.eclipse.jetty.server. שרת: התחיל @ 1672ms

כעת, היישום מאזין ביציאה 8080, ואנחנו יכולים לגשת לנקודת הקצה של המותג שלנו בכתובת // localhost: 8080 / מותגים.

6. בדיקת בריאות

כאשר התחלנו את הבקשה, התבשרנו כי לבדיקה אין בקשה לבריאות. לְמַרְבֶּה הַמַזָל, Dropwizard מספק פיתרון קל להוספת בדיקות בריאות ליישום שלנו.

נתחיל בהוספת מחלקה פשוטה שמתארכת com.codahale.metrics.health.HealthCheck:

מחלקה ציבורית ApplicationHealthCheck מרחיב את HealthCheck {@Override מוגן בדיקת התוצאות () זורקת חריג {להחזיר Result.healthy (); }}

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

לבסוף, אנחנו צריכים לרשום את בדיקת הבריאות שלנו בתוך ה לָרוּץ השיטה שלנו מבוא יישום מעמד:

סביבה .healthChecks () .register ("יישום", ApplicationHealthCheck חדש ());

לאחר הפעלת היישום, אנו יכולים לבדוק את תגובת בדיקת הבריאות תַחַת // localhost: 8081 / healthcheck:

{"application": {"healthy": true, "duration": 0}, "deadlocks": {"healthy": true, "duration": 0}}

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

7. מסקנה

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

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

כמו תמיד, הקוד עבור דוגמאות אלה זמין ב- GitHub.

תחתית Java

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס