Útmutató a tavaszi feladatütemezőhöz
1. Áttekintés
Ebben a cikkben megvitatjuk a Tavaszi feladatütemezési mechanizmusok – Feladat ütemező és előre elkészített megvalósításai, valamint a különböző kiváltó tényezők. Ha többet szeretne tudni a tavaszi ütemezésről, ellenőrizze @Aszinkron és @Ütemezett cikkeket.
TaskScheuler 3.0 tavaszán vezették be különféle módszerekkel, amelyek a jövőben egy bizonyos ponton futtathatók, és visszaadja a ScheduledFuture felület, amely felhasználható az ütemezett feladat törlésére vagy annak elvégzésére.
Mindössze annyit kell tennünk, hogy kiválasztunk egy futtatható feladatot az ütemezéshez, majd kiválasztunk egy megfelelő ütemezési házirendet.
2. ThreadPoolTaskScheduler
ThreadPoolTaskScheduler kiválóan alkalmas belső szálak kezelésére, mivel feladatokat delegál a ScheduledExecutorService és végrehajtja a TaskExecutor interfész - így egyetlen példánya képes kezelni az aszinkron potenciális végrehajtásokat, valamint a @Ütemezett annotáció.
Most határozzuk meg ThreadPoolTaskScheduler bab itt ThreadPoolTaskSchedulerConfig: A konfigurált bab threadPoolTaskScheduler aszinkron módon tudja végrehajtani a feladatokat a beállított 5-ös készlet méret alapján. Vegye figyelembe, hogy minden ThreadPoolTaskScheduler a kapcsolódó szálnevek előtaggal lesznek ThreadPoolTaskScheduler. Végezzünk el egy egyszerű feladatot, amelyet aztán ütemezhetünk: Most már egyszerűen ütemezhetjük, hogy ezt a feladatot az ütemező hajtsa végre: A feladat ütemező ütemezi ezt a futható feladatot egy ismert időpontra, pontosan 3 másodperccel az aktuális idő után. Menjünk most egy kicsit részletesebben a ThreadPoolTaskScheduler ütemezési mechanizmusok. A fix késleltetéssel történő ütemezés két egyszerű mechanizmussal hajtható végre: Konfiguráljunk egy feladatot 1000 milliszekundumos fix késés után történő futtatásra: A RunnableTask mindig 1000 milliszekundummal később fog futni az egyik végrehajtás befejezése és a következő kezdete között. Konfiguráljuk a feladatot egy adott kezdési idő fix késleltetése után futásra: A RunnableTask a megadott végrehajtási időpontban lesz meghívva, amely főleg az az idő, amelyben @PostConstruct a módszer elindul, majd 1000 milliszekundum késéssel. Két egyszerű mechanizmus létezik a futható feladatok rögzített ütemű ütemezéséhez: Ütemezzünk egy feladatot egy a rögzített ezredmásodperc: A következő RunnableTask 2000 milliszekundum után fog futni, függetlenül az utolsó végrehajtás állapotától, amely esetleg még fut. A RunnableTask 3000 milliszekundumot fog futni a jelenlegi idő után. CronTrigger a feladat cron kifejezés alapján történő ütemezésére szolgál: A megadott trigger aktiválható egy feladat futtatásához egy meghatározott megadott ütem vagy ütemezés szerint: Ebben az esetben a RunnableTask minden perc 10. másodpercében végrehajtják. Használjuk PeriodicTrigger a feladat ütemezéséhez a fix késleltetés 2000 ezredmásodperc: A konfigurált PeriodicTrigger A babot egy feladat futtatására használják, 2000 milliszekundum fix késleltetés után. Most ütemezzük be a RunnableTask a ... val PeriodicTrigger: Konfigurálhatunk is PeriodicTrigger rögzített késleltetéssel inicializálni, nem pedig fix késleltetés mellett, az első ütemezett feladat kezdeti késleltetését is beállíthatjuk egy adott milliszekundummal. Mindössze annyit kell tennünk, hogy hozzáadunk két kódsort a return utasítás elé a periodicTrigger bab: Használtuk a setFixedRate módszer a feladat rögzített ütemben történő ütemezésére, nem pedig fix késéssel setInitialDelay metódus csak az első futandó feladat kezdeti késleltetésének beállítására szolgál. Ebben a gyors cikkben bemutattuk, hogyan lehet ütemezni egy futható feladatot a Spring támogatás segítségével a feladatokhoz. Megnéztük, hogy a feladatot fix késéssel, rögzített sebességgel és egy meghatározott trigger szerint futtatjuk. És mint mindig, a kód Maven-projektként is elérhető a GitHubban.@Configuration @ComponentScan (basePackages = "com.baeldung.taskscheduler", basePackageClasses = {ThreadPoolTaskSchedulerExamples.class}) public class ThreadPoolTaskSchedulerConfig {@Bean public ThreadPoolTaskSchulSchulSchulToolSchulToolSchulToolPaskTaskSchulToolSchulToolPaskToolSchulToolSchulToolSoolToolSchulToolSoolToolSchulToolSoolToolSchulToolPaskToolSoolPaskTulcsSulka (Eredeti) ThulPoolTaskSchulter (IskolaPaskSchulter) {@Bean public ThreadPoolTaskSulchulter {Cím] threadPoolTaskScheduler.setPoolSize (5); threadPoolTaskScheduler.setThreadNamePrefix ("ThreadPoolTaskScheduler"); return threadPoolTaskScheduler; }}
osztály RunnableTask megvalósítja Runnable {private String üzenetet; public RunnableTask (String üzenet) {this.message = üzenet; } @Orride public void run () {System.out.println (new Date () + "Futtatható feladat" + üzenettel + "a szálon" + Thread.currentThread (). GetName ()); }}
taskScheduler.schedule (új Runnabletask ("Meghatározott idő, 3 másodperc múlva"), új Dátum (System.currentTimeMillis + 3000));
3. Futtatható feladat ütemezése fix késéssel
3.1. Ütemezés az utolsó ütemezett végrehajtás fix késése után
taskScheduler.scheduleWithFixedDelay (új RunnableTask ("Fix 1 másodperces késés"), 1000);
3.2. Ütemezés egy adott dátum fix késése után
taskScheduler.scheduleWithFixedDelay (új RunnableTask ("Az aktuális dátum javítva 1 másodperces késéssel"), új Date (), 1000);
4. Ütemezés rögzített árfolyamon
4.1. A. Ütemezése RunnableTask rögzített árfolyamon
taskScheduler.scheduleAtFixedRate (új RunnableTask ("2 másodperces rögzített sebesség"), 2000);
4.2. A. Ütemezése RunnableTask rögzített árfolyamon adott dátumtól
taskScheduler.scheduleAtFixedRate (új RunnableTask ("2 másodperces rögzített sebesség"), új Date (), 3000);
5. Ütemezés a CronTrigger
CronTrigger cronTrigger = new CronTrigger ("10 * * * *?");
taskScheduler.schedule (új RunnableTask ("Cron Trigger"), cronTrigger);
6. Ütemezés a PeriodicTrigger
PeriodicTrigger periodicTrigger = új PeriodicTrigger (2000, TimeUnit.MICROSECONDS);
taskScheduler.schedule (új RunnableTask ("Periodic Trigger"), periodicTrigger);
periodicTrigger.setFixedRate (true); periodicTrigger.setInitialDelay (1000);
7. Következtetés