Sprievodca jarným plánovačom úloh

1. Prehľad

V tomto článku si rozoberieme Mechanizmy jarného plánovania úlohPlá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:

@Configuration @ComponentScan (basePackages = "com.baeldung.taskscheduler", basePackageClasses = {ThreadPoolTaskSchedulerExamples.class}) verejná trieda ThreadPoolTaskSchedulerConfig {@Bean public ThreadPoolTaskScheduler threadPoolTaskScheduler () threadPoolTaskScheduler.setPoolSize (5); threadPoolTaskScheduler.setThreadNamePrefix ("ThreadPoolTaskScheduler"); return threadPoolTaskScheduler; }}

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ť:

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 ()); }} 

Túto úlohu môžeme teraz jednoducho naplánovať tak, aby ju plánovač vykonal:

taskScheduler.schedule (nový Runnabletask („konkrétny čas, o 3 sekundy odteraz“), nový dátum (System.currentTimeMillis + 3000)); 

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.

3. Naplánujte spustiteľnú úlohu s pevným oneskorením

Plánovanie s pevným oneskorením je možné vykonať dvoma jednoduchými mechanizmami:

3.1. Plánovanie po pevnom oneskorení posledného naplánovaného vykonania

Nakonfigurujme úlohu tak, aby sa spúšťala po pevnom oneskorení 1000 milisekúnd:

taskScheduler.scheduleWithFixedDelay (nový RunnableTask ("Opravené 1 sekundové oneskorenie"), 1 000);

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.

3.2. Plánovanie po pevnom oneskorení konkrétneho dátumu

Nakonfigurujme úlohu tak, aby sa spustila po pevnom oneskorení daného času začiatku:

taskScheduler.scheduleWithFixedDelay (nový RunnableTask ("oneskorenie aktuálneho dátumu o 1 sekundu"), nový dátum (), 1000);

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.

4. Plánovanie s pevnou sadzbou

Existujú dva jednoduché mechanizmy na plánovanie spustiteľných úloh s pevnou rýchlosťou:

4.1. Plánovanie RunnableTask s pevnou sadzbou

Naplánujme si úlohu, ktorá má bežať na a fixná miera milisekúnd:

taskScheduler.scheduleAtFixedRate (nový RunnableTask ("Fixná rýchlosť 2 sekundy"), 2000);

Ď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ť.

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);

The RunnableTask pobeží 3 000 milisekúnd po aktuálnom čase.

5. Plánovanie s CronTrigger

CronTrigger sa používa na naplánovanie úlohy na základe výrazu cron:

CronTrigger cronTrigger = nový CronTrigger ("10 * * * *?"); 

Zadaný spúšťač je možné použiť na spustenie úlohy podľa určitej špecifikovanej kadencie alebo harmonogramu:

taskScheduler.schedule (nový RunnableTask ("Cron Trigger"), cronTrigger);

V takom prípade RunnableTask sa vykoná v 10. sekunde každej minúty.

6. Plánovanie s PeriodicTrigger

Poďme použiť PeriodicTrigger pre naplánovanie úlohy s a pevné oneskorenie 2 000 milisekúnd:

PeriodicTrigger periodicTrigger = nový PeriodicTrigger (2000, TimeUnit.MICROSECONDS);

Nakonfigurovaný PeriodicTrigger bean by sa použil na spustenie úlohy po fixnom oneskorení 2 000 milisekúnd.

Teraz si naplánujme RunnableTask s PeriodicTrigger:

taskScheduler.schedule (nový RunnableTask ("Periodic Trigger"), 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:

periodicTrigger.setFixedRate (true); periodicTrigger.setInitialDelay (1000);

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.

7. Záver

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.


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