Den @ Planlagte merknaden om våren

1. Oversikt

I denne opplæringen vil vi illustrere hvordan våren @ Planlagt kommentar kan brukes til å konfigurere og planlegge oppgaver.

De enkle reglene som vi må følge for å kommentere en metode med @ Planlagt er:

  • en metode skal ha tomrom returtype
  • en metode skal ikke akseptere noen parametere

2. Aktiver støtte for planlegging

For å aktivere støtte for planlegging av oppgaver og @ Planlagt kommentar om våren, kan vi bruke Java-aktiveringsstilkommentar:

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

Omvendt kan vi gjøre det samme i XML:

3. Planlegg en oppgave ved fast forsinkelse

La oss starte med å konfigurere en oppgave som skal kjøres etter en fast forsinkelse:

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

I dette tilfellet er varigheten mellom slutten av den siste utførelsen og starten av neste utførelse fast. Oppgaven venter alltid til den forrige er ferdig.

Dette alternativet skal brukes når det er obligatorisk at den forrige kjøringen er fullført før den kjøres på nytt.

4. Planlegg en oppgave til fast pris

La oss nå utføre en oppgave med et fast tidsintervall:

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

Dette alternativet skal brukes når hver utførelse av oppgaven er uavhengig.

Merk at planlagte oppgaver ikke kjøres parallelt som standard. Så selv om vi brukte fast pris, vil neste oppgave ikke påberopes før den forrige er ferdig.

Hvis vi vil støtte parallell oppførsel i planlagte oppgaver, må vi legge til @Async kommentar:

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

Nå blir denne asynkrone oppgaven påkalt hvert sekund, selv om den forrige oppgaven ikke er gjort.

5. Fast rente kontra fast forsinkelse

Vi kan kjøre en planlagt oppgave ved hjelp av Spring's @ Planlagt kommentar, men basert på egenskapene fixedDelay og fast pris, innføringen endres.

De fixedDelay eiendommen sørger for at det er en forsinkelse på n millisekund mellom sluttidspunktet for en utføring av en oppgave og starttiden for neste utførelse av oppgaven.

Denne egenskapen er spesielt nyttig når vi trenger å sørge for at bare en forekomst av oppgaven kjører hele tiden. For avhengige jobber er det ganske nyttig.

De fast pris Eiendom kjører den planlagte oppgaven til enhver tid n millisekund. Det ser ikke etter tidligere henrettelser av oppgaven.

Dette er nyttig når alle henrettelser av oppgaven er uavhengige. Hvis vi ikke forventer å overskride minnestørrelsen og trådgruppen, fast pris burde være ganske hendig.

Selv om innkommende oppgaver ikke avsluttes raskt, er det mulig at de ender med "Unntatt minne".

6. Planlegg en oppgave med innledende forsinkelse

La oss deretter planlegge en oppgave med forsinkelse (i millisekunder):

@Scheduled (fixedDelay = 1000, initialDelay = 1000) public void schedFixedRateWithInitialDelayTask () {long now = System.currentTimeMillis () / 1000; System.out.println ("Fast hastighetsoppgave med ett sekunders forsinkelse -" + nå); }

Legg merke til hvordan vi bruker begge deler fixedDelay i tillegg til initialDelay i dette eksemplet. Oppgaven vil bli utført første gang etter initialDelay verdi, og den vil fortsette å bli utført i henhold til fixedDelay.

Dette alternativet er praktisk når oppgaven har et oppsett som må fullføres.

7. Planlegg en oppgave ved hjelp av Cron-uttrykk

Noen ganger er forsinkelser og priser ikke nok, og vi trenger fleksibiliteten til et cron-uttrykk for å kontrollere tidsplanen for oppgavene våre:

@Scheduled (cron = "0 15 10 15 *?") Offentlig ugyldig scheduleTaskUsingCronExpression () {lang nå = System.currentTimeMillis () / 1000; System.out.println ("planlegg oppgaver ved hjelp av cron-jobber -" + nå); }

Merk at i dette eksemplet planlegger vi en oppgave som skal utføres klokken 10:15 den 15. dagen i hver måned.

Som standard vil Spring bruke serverens lokale tidssone for cron-uttrykk. Derimot, vi kan bruke sone attributt for å endre denne tidssonen:

@Scheduled (cron = "0 15 10 15 *?", Zone = "Europe / Paris")

Med denne konfigurasjonen vil Spring planlegge den merkede metoden til å kjøre kl. 10:15 den 15. dagen i hver måned i Paris-tid.

8. Parametere planen

Hardkoding av disse timeplanene er enkel, men vi trenger vanligvis å kunne kontrollere tidsplanen uten å kompilere og distribuere hele appen på nytt.

Vi bruker Spring Expressions for å eksternalisere konfigurasjonen av oppgavene, og vi lagrer disse i egenskapsfiler.

EN fixedDelay oppgave:

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

EN fast pris oppgave:

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

EN cron uttrykksbasert oppgave:

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

9. Konfigurere planlagte oppgaver ved hjelp av XML

Spring gir også en XML-måte å konfigurere de planlagte oppgavene på. Her er XML-konfigurasjonen for å sette opp disse:

10. Konklusjon

I denne artikkelen diskuterte vi veien til konfigurere og bruke @ Planlagt kommentar.

Vi dekket prosessen for å muliggjøre planlegging og forskjellige måter å konfigurere planleggingsoppgavemønstre på.

Eksemplene vist ovenfor finner du på GitHub.


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