A @ ütemezett kommentár tavasszal

1. Áttekintés

Ebben az oktatóanyagban bemutatjuk, hogyan a tavasz @Ütemezett annotáció felhasználható feladatok konfigurálására és ütemezésére.

Azok az egyszerű szabályok, amelyeket be kell tartanunk ahhoz, hogy egy metódust feljegyezzünk @Ütemezett vannak:

  • egy módszernek rendelkeznie kell a üres visszatérési típus
  • egy módszer nem fogadhat el paramétereket

2. Engedélyezze az ütemezés támogatását

Az ütemezési feladatok és a @Ütemezett tavaszi kommentár, használhatjuk a Java engedélyezési stílusú kommentárokat:

@Configuration @EnableScheduling nyilvános osztály SpringConfig {...}

Fordítva, ugyanezt megtehetjük XML-ben is:

3. Ütemezzen egy feladatot fix késéssel

Kezdjük azzal, hogy konfigurálunk egy feladatot fix késés után történő futtatásra:

@Scheduled (fixedDelay = 1000) public void scheduleFixedDelayTask () {System.out.println ("Fix késleltetési feladat -" + System.currentTimeMillis () / 1000); }

Ebben az esetben az utolsó végrehajtás vége és a következő végrehajtás kezdete közötti időtartam rögzített. A feladat mindig megvárja, amíg az előző befejeződik.

Ezt az opciót akkor kell használni, ha az új futtatás előtt kötelező az előző végrehajtás befejezése.

4. Ütemezzen egy feladatot fix árfolyamon

Végezzünk most egy feladatot rögzített időközönként:

@Scheduled (fixedRate = 1000) public void scheduleFixedRateTask () {System.out.println ("Fixed rate task -" + System.currentTimeMillis () / 1000); }

Ezt az opciót akkor kell használni, ha a feladat minden végrehajtása független.

Ne feledje, hogy az ütemezett feladatok alapértelmezés szerint nem futnak párhuzamosan. Tehát akkor is, ha használtuk fixedRate, a következő feladat csak akkor lesz meghívható, ha az előző elkészült.

Ha támogatni akarjuk az ütemezett feladatok párhuzamos viselkedését, hozzá kell adnunk a @Aszinkron kommentár:

@EnableAsync public class ScheduledFixedRateExample {@Async @Scheduled (fixedRate = 1000) public void scheduleFixedRateTaskAsync () dobja az InterruptedException {System.out.println ("Fixed rate async -" + System.currentTimeMillis () Szál.alszik (2000); }}

Ez az aszinkron feladat most másodpercenként meghívásra kerül, még akkor is, ha az előző feladatot nem hajtották végre.

5. Fix kamatláb vs fix késés

Ütemezett feladatot futtathatunk a Spring's segítségével @Ütemezett annotációval, de a tulajdonságok alapján fixDelay és fixedRate, a végrehajtás jellege megváltozik.

A fixDelay ingatlan gondoskodik arról, hogy késedelem legyen n ezredmásodperc a feladat végrehajtásának befejezési ideje és a feladat következő végrehajtásának kezdési ideje között.

Ez a tulajdonság kifejezetten akkor hasznos, ha meg kell győződnünk arról, hogy a feladatnak csak egy példánya fut-e folyamatosan. Eltartott munkáknál ez nagyon hasznos.

A fixedRate tulajdonság minden esetben futtatja az ütemezett feladatot n miliszekundum. Nem ellenőrzi a feladat korábbi végrehajtásait.

Ez akkor hasznos, ha a feladat minden végrehajtása független. Ha nem várjuk, hogy túllépjük a memória és a szálkészlet méretét, fixedRate elég praktikusnak kell lennie.

Bár, ha a bejövő feladatok nem fejeződnek be gyorsan, akkor előfordulhat, hogy a „Kivétel a memóriából” kivétel.

6. Ütemezzen egy feladatot kezdeti késéssel

Ezután ütemezzünk egy feladatot késéssel (ezredmásodpercben):

@Scheduled (fixedDelay = 1000, initialDelay = 1000) public void scheduleFixedRateWithInitialDelayTask () {long now = System.currentTimeMillis () / 1000; System.out.println ("Fix sebességű feladat egy másodperces kezdeti késéssel -" + most); }

Vegye figyelembe, hogyan használjuk mindkettőt fixDelay továbbá initialDelay ebben a példában. A feladat a. Után kerül végrehajtásra initialDelay értéket, és továbbra is a fixDelay.

Ez az opció akkor kényelmes, ha a feladatnak be van állítva a befejezése.

7. Ütemezzen egy feladatot a Cron kifejezések használatával

Néha a késések és az arányok nem elegendőek, és szükségünk van egy cron kifejezés rugalmasságára a feladataink ütemezésének ellenőrzéséhez:

@Scheduled (cron = "0 15 10 15 *?") Public void scheduleTaskUsingCronExpression () {long now = System.currentTimeMillis () / 1000; System.out.println ("feladatok ütemezése a cron jobok használatával -" + most); }

Ne feledje, hogy ebben a példában minden hónap 15. napján 10: 15-kor végrehajtandó feladatot ütemezünk.

Alapértelmezés szerint a Spring a szerver helyi időzónáját használja a cron kifejezéshez. Azonban, használhatjuk a zóna attribútum az időzóna módosításához:

@Scheduled (cron = "0 15 10 15 *?", Zone = "Európa / Párizs")

Ezzel a konfigurációval a Spring a jegyzetelt módszert úgy fogja ütemezni, hogy minden hónap 15. napján, 10: 15-kor, párizsi idő szerint futjon.

8. Az ütemezés paraméterezése

Ezeknek az ütemezéseknek a kódolása egyszerű, de általában képesnek kell lenniünk az ütemezés irányítására anélkül, hogy újra össze kellene állítanunk és telepítenünk kellene az egész alkalmazást.

A Spring Expressions használatával kiszervezzük a feladatok konfigurációját, és ezeket a tulajdonságfájlokban tároljuk.

A fixDelay feladat:

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

A fixedRate feladat:

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

A cron kifejezés alapú feladat:

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

9. Ütemezett feladatok konfigurálása XML használatával

A Spring egy XML módszert is kínál az ütemezett feladatok konfigurálásához. Itt van az XML konfiguráció ezek beállításához:

10. Következtetés

Ebben a cikkben megvitattuk a módját konfigurálja és használja a @Ütemezett annotáció.

Kitértünk az ütemezés engedélyezésének folyamatára és az ütemezési feladatminták konfigurálásának különféle módjaira.

A fenti példák a GitHub oldalon találhatók.