Den @ planlagte kommentar om foråret

1. Oversigt

I denne vejledning illustrerer vi hvordan foråret @ Planlagt kommentar kan bruges til at konfigurere og planlægge opgaver.

De enkle regler, som vi skal følge for at kommentere en metode med @ Planlagt er:

  • en metode skal have ugyldig returtype
  • en metode bør ikke acceptere nogen parametre

2. Aktivér support til planlægning

For at muliggøre support til planlægning af opgaver og @ Planlagt annotation i foråret, kan vi bruge Java-aktivering-stil kommentar:

@Configuration @EnableScheduling offentlig klasse SpringConfig {...}

Omvendt kan vi gøre det samme i XML:

3. Planlæg en opgave ved fast forsinkelse

Lad os starte med at konfigurere en opgave, der skal køre efter en fast forsinkelse:

@Scheduled (fixedDelay = 1000) public void schedulFixedDelayTask () {System.out.println ("Fixed delay task -" + System.currentTimeMillis () / 1000); }

I dette tilfælde er varigheden mellem slutningen af ​​den sidste udførelse og starten på den næste udførelse fast. Opgaven venter altid, indtil den forrige er færdig.

Denne mulighed skal bruges, når det er obligatorisk, at den tidligere udførelse er afsluttet, før den kører igen.

4. Planlæg en opgave til en fast sats

Lad os nu udføre en opgave med et fast tidsinterval:

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

Denne mulighed skal bruges, når hver udførelse af opgaven er uafhængig.

Bemærk, at planlagte opgaver ikke kører parallelt som standard. Så selvom vi brugte fast pris, vil den næste opgave ikke påberåbes, før den foregående er udført.

Hvis vi vil understøtte parallel adfærd i planlagte opgaver, skal vi tilføje @Async kommentar:

@EnableAsync offentlig klasse ScheduledFixedRateExample {@Async @Scheduled (fixedRate = 1000) public void scheduleFixedRateTaskAsync () kaster InterruptedException {System.out.println ("Fast hastighed opgave async -" + System.currentTimeMillis () / 1000); Thread.sleep (2000); }}

Nu kaldes denne asynkrone opgave hvert sekund, selvom den tidligere opgave ikke er udført.

5. Fast rente versus fast forsinkelse

Vi kan køre en planlagt opgave ved hjælp af Spring's @ Planlagt kommentar, men baseret på egenskaberne fast forsinkelse og fast pris, udførelsens art ændres.

Det fast forsinkelse ejendom sørger for, at der er en forsinkelse på n millisekund mellem sluttidspunktet for en udførelse af en opgave og starttidspunktet for den næste udførelse af opgaven.

Denne egenskab er specielt nyttig, når vi skal sikre os, at kun en forekomst af opgaven kører hele tiden. For afhængige job er det ret nyttigt.

Det fast pris ejendom kører den planlagte opgave hver gang n millisekund. Det kontrollerer ikke for tidligere udførelser af opgaven.

Dette er nyttigt, når alle udførelser af opgaven er uafhængige. Hvis vi ikke forventer at overstige størrelsen på hukommelsen og trådpuljen, fast pris skal være ret praktisk.

Selvom det ikke er muligt, hvis de indgående opgaver ikke afsluttes hurtigt, ender de med "Undtagelse fra hukommelse".

6. Planlæg en opgave med indledende forsinkelse

Lad os derefter planlægge en opgave med en forsinkelse (i millisekunder):

@Scheduled (fixedDelay = 1000, initialDelay = 1000) public void schedFixedRateWithInitialDelayTask () {long now = System.currentTimeMillis () / 1000; System.out.println ("Fast hastighedsopgave med et sekunders indledende forsinkelse -" + nu); }

Bemærk hvordan vi bruger begge dele fast forsinkelse såvel som initialDelay i dette eksempel. Opgaven udføres første gang efter initialDelay værdi, og den vil fortsat blive udført i henhold til fast forsinkelse.

Denne mulighed er praktisk, når opgaven har en opsætning, der skal afsluttes.

7. Planlæg en opgave ved hjælp af Cron Expressions

Nogle gange er forsinkelser og priser ikke nok, og vi har brug for fleksibiliteten i et cron-udtryk for at kontrollere tidsplanen for vores opgaver:

@Scheduled (cron = "0 15 10 15 *?") Offentlig ugyldig scheduleTaskUsingCronExpression () {lang nu = System.currentTimeMillis () / 1000; System.out.println ("planlæg opgaver ved hjælp af cron-job -" + nu); }

Bemærk, at i dette eksempel planlægger vi en opgave, der skal udføres kl. 10:15 den 15. dag i hver måned.

Som standard bruger Spring serverens lokale tidszone til cron-udtryk. Imidlertid, vi kan bruge zone attribut for at ændre denne tidszone:

@ Planlagt (cron = "0 15 10 15 *?", Zone = "Europa / Paris")

Med denne konfiguration planlægger Spring den annoterede metode til at køre kl. 10:15 den 15. dag i hver måned i Paris-tid.

8. Parametrering af tidsplanen

Hardcoding af disse tidsplaner er enkel, men vi skal normalt være i stand til at kontrollere tidsplanen uden at kompilere og geninstallere hele appen.

Vi bruger Spring Expressions til at eksternalisere konfigurationen af ​​opgaverne, og vi gemmer disse i egenskabsfiler.

EN fast forsinkelse opgave:

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

EN fast pris opgave:

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

EN cron udtryksbaseret opgave:

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

9. Konfiguration af planlagte opgaver ved hjælp af XML

Spring giver også en XML-måde at konfigurere de planlagte opgaver på. Her er XML-konfigurationen til opsætning af disse:

10. Konklusion

I denne artikel diskuterede vi vejen til konfigurere og bruge @ Planlagt kommentar.

Vi dækkede processen for at muliggøre planlægning og forskellige måder at konfigurere planlægningsopgavemønstre på.

Eksemplerne vist ovenfor kan findes på GitHub.


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