@Naplánovaná anotácia na jar

1. Prehľad

V tomto výučbe si ukážeme, ako na to pružina @Naplánovaný anotácia možno použiť na konfiguráciu a plánovanie úloh.

Jednoduché pravidlá, ktoré musíme dodržiavať pri anotácii metódy @Naplánovaný sú:

  • metóda by mala mať neplatný návratový typ
  • metóda by nemala akceptovať žiadne parametre

2. Povoľte podporu plánovania

Povolenie podpory pre úlohy plánovania a @Naplánovaný na jar môžeme použiť anotáciu v štýle Java:

@Configuration @EnableScheduling verejná trieda SpringConfig {...}

Naopak, to isté môžeme urobiť v XML:

3. Naplánujte si úlohu na pevné oneskorenie

Začnime konfiguráciou úlohy, ktorá sa má spustiť po pevnom oneskorení:

@Scheduled (fixedDelay = 1000) public void scheduleFixedDelayTask () {System.out.println ("Úloha s pevným oneskorením -" + System.currentTimeMillis () / 1000); }

V tomto prípade je trvanie medzi koncom poslednej popravy a začiatkom nasledujúcej popravy pevné. Úloha vždy počká, kým sa dokončí predchádzajúca.

Táto možnosť by sa mala použiť, keď je povinné dokončiť predchádzajúce spustenie pred ďalším spustením.

4. Naplánujte úlohu na pevnú sadzbu

Poďme teraz vykonať úlohu v pevne stanovenom časovom intervale:

@Scheduled (fixedRate = 1000) public void scheduleFixedRateTask () {System.out.println ("Úloha s pevnou sadzbou -" + System.currentTimeMillis () / 1000); }

Táto možnosť by sa mala použiť, keď je každé vykonanie úlohy nezávislé.

Upozorňujeme, že naplánované úlohy sa predvolene nespúšťajú paralelne. Takže aj keby sme použili fixna sadzba, ďalšia úloha bude vyvolaná až po dokončení predchádzajúcej úlohy.

Ak chceme podporiť paralelné správanie v naplánovaných úlohách, musíme pridať @Async anotácia:

@EnableAsync verejná trieda ScheduledFixedRateExample {@Async @Scheduled (fixedRate = 1000) public void scheduleFixedRateTaskAsync () vyvolá InterruptedException {System.out.println ("úloha s pevnou sadzbou async -" + System.currentTimeMillis () / 1000); Thread.sleep (2000); }}

Teraz sa táto asynchrónna úloha vyvolá každú sekundu, aj keď sa predchádzajúca úloha nedokončila.

5. Fixná sadzba vs pevné oneskorenie

Naplánovanú úlohu môžeme spustiť pomocou nástroja Spring's @Naplánovaný anotáciu, ale na základe vlastností fixedDelay a fixna sadzba, povaha zmien exekúcie.

The fixedDelay majetok zaisťuje, že dôjde k meškaniu n milisekundy medzi časom dokončenia vykonania úlohy a časom začiatku nasledujúceho vykonania úlohy.

Táto vlastnosť je obzvlášť užitočná, keď sa potrebujeme uistiť, že vždy beží iba jedna inštancia úlohy. Pre závislé práce je to celkom užitočné.

The fixna sadzba vlastnosť spustí naplánovanú úlohu pri každom n milisekunda. Nekontroluje žiadne predchádzajúce vykonanie úlohy.

Je to užitočné, keď sú všetky vykonania úlohy nezávislé. Ak neočakávame prekročenie veľkosti pamäte a fondu vlákien, fixna sadzba by mal byť celkom šikovný.

Aj keď sa prichádzajúce úlohy nedokončia rýchlo, je možné, že skončia s výnimkou „Nedostatok pamäte“.

6. Naplánujte si úlohu s počiatočným oneskorením

Ďalej naplánujme úlohu s oneskorením (v milisekundách):

@Scheduled (fixedDelay = 1000, initialDelay = 1000) public void scheduleFixedRateWithInitialDelayTask () {dlho teraz = System.currentTimeMillis () / 1000; System.out.println ("Úloha s pevnou sadzbou s počiatočným oneskorením jednej sekundy -" + teraz); }

Všimnite si, ako používame obe možnosti fixedDelay ako aj initialDelay v tomto príklade. Úloha sa vykoná prvýkrát po initialDelay hodnoty a bude sa naďalej vykonávať podľa fixedDelay.

Táto možnosť je vhodná, keď má úloha nastavenie, ktoré je potrebné dokončiť.

7. Naplánujte úlohu pomocou výrazov Cron

Niekedy oneskorenia a sadzby nie sú dostatočné a na kontrolu rozvrhu našich úloh potrebujeme flexibilitu výrazu cron:

@Scheduled (cron = "0 15 10 15 *?") Public void scheduleTaskUsingCronExpression () {dlho teraz = System.currentTimeMillis () / 1000; System.out.println ("naplánovať úlohy pomocou úloh cron -" + teraz); }

Upozorňujeme, že v tomto príklade plánujeme vykonanie úlohy na 10:15 ráno 15. deň každého mesiaca.

V predvolenom nastavení použije Spring pre výraz cron miestne časové pásmo servera. Avšak môžeme použiť zóna atribút zmeniť toto časové pásmo:

@Scheduled (cron = "0 15 10 15 *?", Zóna = "Európa / Paríž")

S touto konfiguráciou Spring naplánuje spustenie anotovanej metódy na 10:15 ráno 15. deň každého mesiaca v Paríži.

8. Parametrizácia rozvrhu

Naprogramovanie týchto plánov na pevnú väzbu je jednoduché, ale zvyčajne musíme byť schopní ovládať plán bez opätovného kompilácie a opätovného nasadenia celej aplikácie.

Na externalizáciu konfigurácie úloh využijeme jarné výrazy, ktoré uložíme do súborov vlastností.

A fixedDelay úloha:

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

A fixna sadzba úloha:

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

A cron úloha založená na výraze:

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

9. Konfigurácia naplánovaných úloh pomocou XML

Jar tiež poskytuje XML spôsob konfigurácie naplánovaných úloh. Tu je konfigurácia XML na ich nastavenie:

10. Záver

V tomto článku sme rozobrali cestu k konfigurovať a používať @Naplánovaný anotácia.

Pokryli sme proces umožňujúci plánovanie a rôzne spôsoby konfigurácie vzorov úloh plánovania.

Príklady uvedené vyššie nájdete na GitHub.


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