Sprievodca jarným plánovačom úloh
1. Prehľad
V tomto článku si rozoberieme Mechanizmy jarného plánovania úloh – Plánovač úloh a sú to vopred pripravené implementácie spolu s rôznymi spúšťačmi, ktoré sa majú použiť. Ak si chcete prečítať viac o plánovaní na jar, skontrolujte to @Async a @Naplánovaný článkov.
TaskScheuler bol predstavený na jar 3.0 s rôznymi metódami, ktoré sa majú spustiť niekedy v budúcnosti, vráti tiež objekt reprezentácie Naplánovaná budúcnosť rozhranie, ktoré sa dá použiť na zrušenie naplánovanej úlohy alebo na kontrolu, či je hotová alebo nie.
Všetko, čo musíme urobiť, je zvoliť spustiteľnú úlohu pre plánovanie a potom zvoliť správnu politiku plánovania.
2. ThreadPoolTaskScheduler
ThreadPoolTaskScheduler je vhodný na správu interných vlákien, pretože deleguje úlohy na ScheduledExecutorService a vykonáva TaskExecutor rozhranie - tak, že jeho jediná inštancia je schopná spracovať asynchrónne potencionálne spustenia rovnako ako @Naplánovaný anotácia.
Poďme to teraz definovať ThreadPoolTaskScheduler fazuľa o ThreadPoolTaskSchedulerConfig: Konfigurovaná fazuľa threadPoolTaskScheduler môže vykonávať úlohy asynchrónne na základe nakonfigurovanej veľkosti fondu 5. Všimnite si, že všetky ThreadPoolTaskScheduler súvisiace názvy vlákien budú mať predponu ThreadPoolTaskScheduler. Implementujme jednoduchú úlohu, ktorú môžeme naplánovať: Túto úlohu môžeme teraz jednoducho naplánovať tak, aby ju plánovač vykonal: The plánovač úloh naplánuje túto spustiteľnú úlohu na známy dátum, presne 3 sekundy po aktuálnom čase. Poďme teraz na niečo podrobnejšie ThreadPoolTaskScheduler mechanizmy plánovania. Plánovanie s pevným oneskorením je možné vykonať dvoma jednoduchými mechanizmami: Nakonfigurujme úlohu tak, aby sa spúšťala po pevnom oneskorení 1000 milisekúnd: The RunnableTask bude vždy bežať o 1000 milisekúnd neskôr medzi dokončením jedného spustenia a začiatkom ďalšieho. Nakonfigurujme úlohu tak, aby sa spustila po pevnom oneskorení daného času začiatku: The RunnableTask budú vyvolané v zadanom čase vykonania, ktorý je hlavne časom, v ktorom @PostConstruct metóda sa spustí a následne s oneskorením 1 000 milisekúnd. Existujú dva jednoduché mechanizmy na plánovanie spustiteľných úloh s pevnou rýchlosťou: Naplánujme si úlohu, ktorá má bežať na a fixná miera milisekúnd: Ďalší RunnableTask bude fungovať vždy po 2 000 milisekundách bez ohľadu na stav posledného spustenia, ktoré ešte môže bežať. The RunnableTask pobeží 3 000 milisekúnd po aktuálnom čase. CronTrigger sa používa na naplánovanie úlohy na základe výrazu cron: Zadaný spúšťač je možné použiť na spustenie úlohy podľa určitej špecifikovanej kadencie alebo harmonogramu: V takom prípade RunnableTask sa vykoná v 10. sekunde každej minúty. Poďme použiť PeriodicTrigger pre naplánovanie úlohy s a pevné oneskorenie 2 000 milisekúnd: Nakonfigurovaný PeriodicTrigger bean by sa použil na spustenie úlohy po fixnom oneskorení 2 000 milisekúnd. Teraz si naplánujme RunnableTask s PeriodicTrigger: Môžeme tiež nakonfigurovať PeriodicTrigger inicializovať skôr pevnou rýchlosťou ako pevným oneskorením, tiež môžeme nastaviť počiatočné oneskorenie pre prvú naplánovanú úlohu o dané milisekundy. Všetko, čo musíme urobiť, je pridať dva riadky kódu pred príkazom return na serveri periodicTrigger fazuľa: Použili sme setFixedRate metóda na naplánovanie úlohy s pevnou rýchlosťou, a nie s pevným oneskorením setInitialDelay metóda sa používa na nastavenie počiatočného oneskorenia iba pre spustenie prvej spustiteľnej úlohy. V tomto rýchlom článku sme ilustrovali, ako naplánovať spustiteľnú úlohu pomocou podpory úloh pre jar. Pozerali sme sa na spustenie úlohy s pevným oneskorením, pevnou rýchlosťou a podľa určeného spúšťača. A ako vždy je kód k dispozícii ako projekt Maven v GitHub.@Configuration @ComponentScan (basePackages = "com.baeldung.taskscheduler", basePackageClasses = {ThreadPoolTaskSchedulerExamples.class}) verejná trieda ThreadPoolTaskSchedulerConfig {@Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler () threadPoolTaskScheduler.setPoolSize (5); threadPoolTaskScheduler.setThreadNamePrefix ("ThreadPoolTaskScheduler"); return threadPoolTaskScheduler; }}
trieda RunnableTask implementuje Runnable {private String message; public RunnableTask (reťazcová správa) {this.message = správa; } @Override public void run () {System.out.println (new Date () + "Spustiteľná úloha s" + správou + "na vlákne" + Thread.currentThread (). GetName ()); }}
taskScheduler.schedule (nový Runnabletask („konkrétny čas, o 3 sekundy odteraz“), nový dátum (System.currentTimeMillis + 3000));
3. Naplánujte spustiteľnú úlohu s pevným oneskorením
3.1. Plánovanie po pevnom oneskorení posledného naplánovaného vykonania
taskScheduler.scheduleWithFixedDelay (nový RunnableTask ("Opravené 1 sekundové oneskorenie"), 1 000);
3.2. Plánovanie po pevnom oneskorení konkrétneho dátumu
taskScheduler.scheduleWithFixedDelay (nový RunnableTask ("oneskorenie aktuálneho dátumu o 1 sekundu"), nový dátum (), 1000);
4. Plánovanie s pevnou sadzbou
4.1. Plánovanie RunnableTask s pevnou sadzbou
taskScheduler.scheduleAtFixedRate (nový RunnableTask ("Fixná rýchlosť 2 sekundy"), 2000);
4.2. Plánovanie RunnableTask s pevnou sadzbou od daného dátumu
taskScheduler.scheduleAtFixedRate (nový RunnableTask ("Fixná rýchlosť 2 sekundy"), nový dátum (), 3000);
5. Plánovanie s CronTrigger
CronTrigger cronTrigger = nový CronTrigger ("10 * * * *?");
taskScheduler.schedule (nový RunnableTask ("Cron Trigger"), cronTrigger);
6. Plánovanie s PeriodicTrigger
PeriodicTrigger periodicTrigger = nový PeriodicTrigger (2000, TimeUnit.MICROSECONDS);
taskScheduler.schedule (nový RunnableTask ("Periodic Trigger"), periodicTrigger);
periodicTrigger.setFixedRate (true); periodicTrigger.setInitialDelay (1000);
7. Záver