ההערה המתוזמנת @ באביב

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

במדריך זה נמחיש כיצד האביב מתוזמן ביאור יכול לשמש לתצורה ולתזמון משימות.

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

  • שיטה צריכה להיות בָּטֵל סוג החזרה
  • שיטה לא אמורה לקבל פרמטרים כלשהם

2. אפשר תמיכה בתזמון

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

@Configuration @EnableScheduling כיתה ציבורית SpringConfig {...}

לעומת זאת, אנו יכולים לעשות את אותו הדבר ב- XML:

3. קבעו משימה בעיכוב קבוע

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

@Scheduled (fixedDelay = 1000) scheduleDelayTask () של הריק הציבורי ציבור () {System.out.println ("משימת השהיה קבועה -" + System.currentTimeMillis () / 1000); }

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

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

4. קבעו משימה בשיעור קבוע

בואו כעת נבצע משימה במרווח זמן קבוע:

@Schedched (fixedRate = 1000) schedulRateTask () זמן ריק ציבורי () {System.out.println ("משימת קצב קבוע -" + System.currentTimeMillis () / 1000); }

יש להשתמש באפשרות זו כאשר כל ביצוע של המשימה הוא עצמאי.

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

אם אנו רוצים לתמוך בהתנהגות מקבילה במשימות מתוזמנות, עלינו להוסיף את ה- @ Async ביאור:

המחלקה הציבורית @EnableAsync ScheduledFixedRateExample {@Async @Schedched (fixedRate = 1000) לוח הזמנים הריק הציבורי FixedRateTaskAsync () זורק את InterruptedException {System.out.println ("קביעת משימת שיעור קבוע -" + System.currentTimeMillis () / 1000); Thread.sleep (2000); }}

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

5. שיעור קבוע לעומת עיכוב קבוע

אנו יכולים להפעיל משימה מתוזמנת באמצעות Spring מתוזמן ביאור, אך מבוסס על המאפיינים fixDelay ו שער קבוע, אופי הביצוע משתנה.

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

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

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

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

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

6. קבע משימה עם עיכוב ראשוני

לאחר מכן, בואו נקבע משימה בעיכוב (באלפיות השנייה):

@Scheduled (fixedDelay = 1000, initialDelay = 1000) schedidRateWithInitialDelayTask () זמן ריק ציבורי ({long now = System.currentTimeMillis () / 1000; System.out.println ("משימת תעריף קבוע עם עיכוב ראשוני שני -" + עכשיו); }

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

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

7. קבעו משימה באמצעות ביטויי קרון

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

@Scheduled (cron = "0 15 10 15 *?") Time public publicTaskUsingCronExpression () {long now = System.currentTimeMillis () / 1000; System.out.println ("תזמן משימות באמצעות עבודות cron -" + עכשיו); }

שים לב שבדוגמה זו אנו מתזמנים משימה שתבוצע בשעה 10:15 ביום ה -15 בכל חודש.

כברירת מחדל, Spring ישתמש באזור הזמן המקומי של השרת לצורך ביטוי cron. למרות זאת, אנחנו יכולים להשתמש ב- אֵזוֹר תכונה לשינוי אזור זמן זה:

@Schedched (cron = "0 15 10 15 *?", Zone = "Europe / Paris")

עם תצורה זו, אביב יתזמן את השיטה המאושרת להפעלה בשעה 10:15 ביום ה -15 בכל חודש בשעה פריז.

8. פרמטריזציה של לוח הזמנים

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

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

א fixDelay מְשִׁימָה:

@Scheduled (fixedDelayString = "$ {fixedDelay.in.milliseconds}")

א שער קבוע מְשִׁימָה:

@Schedched (fixedRateString = "$ {fixedRate.in.milliseconds}")

א קרון משימה מבוססת ביטוי:

@Scheduled (cron = "$ {cron.expression}")

9. קביעת תצורה של משימות מתוזמנות באמצעות XML

אביב מספק גם דרך XML להגדרת תצורה של המשימות המתוזמנות. הנה תצורת ה- XML ​​להגדרת אלה:

10. מסקנה

במאמר זה דנו בדרך ל להגדיר ולהשתמש ב- מתוזמן ביאור.

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

את הדוגמאות המוצגות לעיל ניתן למצוא באתר GitHub.