כיצד להפעיל ולעצור עבודת אצווה מתוזמנת

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

במדריך זה נחקור ונשווה דרכים שונות ל- להפעיל ולעצור עבודת Spring Batch מתוזמנת לכל מקרה עסקי נדרש.

אם אתה זקוק להיכרויות בנושא Spring Batch and Scheduler, אנא עיין במאמרי Spring-Batch ו- Spring-Scheduler.

2. הפעל עבודת אצווה מתוזמנת

ראשית, יש לנו שיעור SpringBatchScheduler להגדרת התזמון ועבודת האצווה. שיטה launchJob () יירשם כמשימה מתוזמנת.

יתר על כן, כדי להפעיל את עבודת Spring Batch המתוזמנת בצורה האינטואיטיבית ביותר, בואו להוסיף דגל מותנה כדי לפטר את העבודה רק כאשר הדגל מוגדר כ- true:

פרטי AtomicBoolean מופעל = AtomicBoolean חדש (נכון); פרטי AtomicInteger batchRunCounter = AtomicInteger חדש (0); @Scheduled (fixedRate = 2000) הפעלה ריקה ציבוריתJob () זורקת חריג {if (enabled.get ()) {תאריך תאריך = תאריך חדש (); JobExecution jobExecution = jobLauncher () .run (job (), JobParametersBuilder חדש () .addDate ("launchDate", תאריך). ToJobParameters ()); batchRunCounter.incrementAndGet (); }} // עצור, התחל פונקציות (שינוי הדגל של מופעל)

המשתנה batchRunCounter ישמש במבחני שילוב כדי לוודא אם משימת האצווה הופסקה.

3. הפסק עבודת אצווה מתוזמנת

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

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

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

3.1. באמצעות מעבד פוסט מתזמן

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

אנחנו יכולים לקרוא במפורש ל postProcessBeforeDestruction () להשמיד את השעועית המתוזמנת הנתונה:

@Test ציבורי בטל stopJobSchedulerWhenSchedulerDestroyed () זורק חריג {ScheduledAnnotationBeanPostProcessor bean = context .getBean (ScheduledAnnotationBeanPostProcessor.class); SpringBatchScheduler schedulerBean = הקשר .getBean (SpringBatchScheduler.class); לחכות (). עדAsserted (() -> Assert.assertEquals (2, schedulerBean.getBatchRunCounter (). get ())); bean.postProcessBeforeDestruction (schedulerBean, "SpringBatchScheduler"); לחכות (). לפחות (3, שניות); Assert.assertEquals (2, schedulerBean.getBatchRunCounter (). Get ()); }

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

3.2. ביטול המתוזמן עתיד

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

הנה מתזמן משימות מותאם אישית לצילום עתיד מַפָּה:

@Bean TaskScheduler ציבורי poolScheduler () {להחזיר CustomTaskScheduler חדש (); } מחלקה פרטית CustomTaskScheduler מרחיב את ThreadPoolTaskScheduler {// @Override public ScheduledFuture scheduleAtFixedRate (ריצה משימה, תקופה ארוכה) {ScheduledFuture future = super .scheduleAtFixedRate (משימה, תקופה); ScheduledMethodRunnable runnable = (ScheduledMethodRunnable) משימה; fixedTasks.put (runnable.getTarget (), עתיד); להחזיר עתיד; }}

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

בטל ציבורי בטלFutureSchedulerTasks () {schedulTasks.forEach ((k, v) -> {if (k instanceof SpringBatchScheduler) {v.cancel (false);}}); }

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

4. מסקנה

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

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

כרגיל, כל דגימות הקוד המשמשות במאמר זמינות באתר GitHub.


$config[zx-auto] not found$config[zx-overlay] not found