@Scheduled Bilješka u proljeće

1. Pregled

U ovom uputstvu ilustrirat ćemo kako Proljeće @ Na rasporedu bilješka može se koristiti za konfiguriranje i raspoređivanje zadataka.

Jednostavna pravila kojih se moramo pridržavati da bismo označili metodu @ Na rasporedu su:

  • metoda bi trebala imati poništiti povratni tip
  • metoda ne bi trebala prihvatiti nikakve parametre

2. Omogućite podršku za zakazivanje

Omogućiti podršku za zadatke raspoređivanja i @ Na rasporedu napomena u proljeće, možemo koristiti napomenu u stilu Java:

@Configuration @EnableScheduling javne klase SpringConfig {...}

Suprotno tome, isto možemo učiniti u XML-u:

3. Zakažite zadatak s fiksnim kašnjenjem

Počnimo s konfiguriranjem zadatka koji će se izvoditi nakon određenog kašnjenja:

@Scheduled (fixedDelay = 1000) javni void rasporedFixedDelayTask () {System.out.println ("Zadatak s fiksnim kašnjenjem - + System.currentTimeMillis () / 1000); }

U ovom je slučaju trajanje između završetka posljednjeg izvršenja i početka sljedećeg izvršenja fiksno. Zadatak uvijek čeka dok se prethodni ne završi.

Ovu bi se opciju trebalo koristiti kada je obvezno da se prethodno izvršavanje izvrši prije ponovnog pokretanja.

4. Zakažite zadatak po fiksnoj tarifi

Izvršimo sada zadatak u određenom vremenskom intervalu:

@Scheduled (fixedRate = 1000) public void scheduleFixedRateTask () {System.out.println ("Zadatak fiksne stope -" + System.currentTimeMillis () / 1000); }

Ovu bi se opciju trebalo koristiti kada je svako izvršavanje zadatka neovisno.

Imajte na umu da se zadani zadaci ne izvršavaju paralelno prema zadanim postavkama. Pa čak i ako smo koristili fiksniRate, sljedeći zadatak neće se pozivati ​​dok se ne izvrši prethodni.

Ako želimo podržati paralelno ponašanje u planiranim zadacima, moramo dodati @Async napomena:

@EnableAsync javna klasa ScheduledFixedRateExample {@Async @Scheduled (fixedRate = 1000) public void scheduleFixedRateTaskAsync () baca InterruptedException {System.out.println ("Async zadatak fiksne stope -" + System.currentTimeMillis () / 1000); Tema.spavanje (2000.); }}

Sada će se taj asinkroni zadatak pozivati ​​svake sekunde, čak i ako prethodni zadatak nije izveden.

5. Fiksna stopa u odnosu na fiksno kašnjenje

Možemo pokrenuti planirani zadatak pomoću Spring-a @ Na rasporedu napomena, ali na temelju svojstava fixedDelay i fiksna stopa, priroda izvršenja se mijenja.

The fixedDelay svojstvo osigurava kašnjenje od n milisekunda između vremena završetka izvršenja zadatka i vremena početka sljedećeg izvršavanja zadatka.

Ovo je svojstvo posebno korisno kada se moramo pobrinuti da cijelo vrijeme radi samo jedan primjerak zadatka. Za ovisne poslove vrlo je korisno.

The fiksniRate svojstvo izvodi planirani zadatak svaki n milisekunde. Ne provjerava postoje li prethodna izvršavanja zadatka.

To je korisno kada su sva izvršavanja zadatka neovisna. Ako ne očekujemo da ćemo premašiti veličinu memorije i spremišta niti, fiksniRate trebao biti vrlo zgodan.

Iako, ako dolazni zadaci ne završe brzo, moguće je da završe s "Iznimkom izvan memorije".

6. Zakažite zadatak s početnim kašnjenjem

Dalje, zakažimo zadatak sa zakašnjenjem (u milisekundama):

@Scheduled (fixedDelay = 1000, početniDelay = 1000) javni void rasporedFixedRateWithInitialDelayTask () {long now = System.currentTimeMillis () / 1000; System.out.println ("Zadatak fiksne brzine s jednom sekundom početnog kašnjenja -" + sada); }

Primijetite kako koristimo oboje fixedDelay kao i početnoDelay u ovom primjeru. Zadatak će se izvršiti prvi put nakon početnoDelay vrijednost i nastavit će se izvršavati prema fixedDelay.

Ova je opcija prikladna kada zadatak ima postavku koju treba dovršiti.

7. Zakažite zadatak pomoću Cron izraza

Ponekad kašnjenja i stope nisu dovoljni, a potrebna nam je fleksibilnost cron izraza za kontrolu rasporeda naših zadataka:

@Scheduled (cron = "0 15 10 15 *?") Javna praznina scheduleTaskUsingCronExpression () {long now = System.currentTimeMillis () / 1000; System.out.println ("zakažite zadatke pomoću cron poslova -" + sada); }

Imajte na umu da u ovom primjeru zakazujemo zadatak koji će se izvršiti u 10:15 ujutro 15. dana svakog mjeseca.

Prema zadanim postavkama, Spring će koristiti lokalnu vremensku zonu poslužitelja za izraz cron. Međutim, možemo koristiti zona atribut za promjenu ove vremenske zone:

@Scheduled (cron = "0 15 10 15 *?", Zone = "Europa / Pariz")

S ovom konfiguracijom, Spring će zakazati pokretanje anotirane metode u 10:15 ujutro 15. dana svakog mjeseca po pariškom vremenu.

8. Parametriranje rasporeda

Kodiranje ovih rasporeda jednostavno je, ali obično moramo biti u mogućnosti kontrolirati raspored bez ponovnog sastavljanja i ponovnog postavljanja cijele aplikacije.

Iskoristit ćemo Spring Expressions za eksternalizaciju konfiguracije zadataka i pohranit ćemo ih u datoteke svojstava.

A fixedDelay zadatak:

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

A fiksniRate zadatak:

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

A cron zadatak zasnovan na izrazu:

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

9. Konfiguriranje planiranih zadataka pomoću XML-a

Spring također pruža XML način konfiguriranja zakazanih zadataka. Evo XML konfiguracije za njihovo postavljanje:

10. Zaključak

U ovom smo članku razgovarali o načinu na koji konfigurirati i koristiti @ Na rasporedu bilješka.

Pokrili smo postupak kako bismo omogućili raspoređivanje i razne načine konfiguriranja obrazaca zadataka zakazivanja.

Gore prikazani primjeri mogu se naći na GitHubu.