En guide til våroppgaveplanleggeren

1. Oversikt

I denne artikkelen vil vi diskutere Planleggingsmekanismer for våroppgaverOppgaveplanlegger og det er forhåndsbygde implementeringer sammen med de forskjellige utløserne som skal brukes. Hvis du vil lese mer om planlegging om våren, sjekk @Async og @ Planlagt artikler.

TaskScheuler ble introdusert våren 3.0 med en rekke metoder for å kjøre på et tidspunkt i fremtiden, returnerer den også et representasjonsobjekt av Planlagt fremtid grensesnitt, som kan brukes til å avbryte planlagt oppgave eller sjekke om det er gjort eller ikke.

Alt vi trenger å gjøre er å velge en kjørbar oppgave for planlegging og deretter velge en riktig planleggingspolicy.

2. ThreadPoolTaskScheduler

ThreadPoolTaskScheduler er godt egnet for intern trådhåndtering, da den delegerer oppgaver til PlanlagtExecutorService og implementerer TaskExecutor grensesnitt - slik at enkelt forekomst av det er i stand til å håndtere asynkrone potensielle henrettelser så vel som @ Planlagt kommentar.

La oss nå definere ThreadPoolTaskScheduler bønne kl ThreadPoolTaskSchedulerConfig:

@Configuration @ComponentScan (basePackages = "com.baeldung.taskscheduler", basePackageClasses = {ThreadPoolTaskSchedulerExamples.class}) public class ThreadPoolTaskSchedulerConfig {@Bean public ThreadPoolTaskScheduler threadPoolTaskSchedulerToolTaskSchedulerToolTaskScheduler threadPoolTaskScheduler.setPoolSize (5); threadPoolTaskScheduler.setThreadNamePrefix ("ThreadPoolTaskScheduler"); return threadPoolTaskScheduler; }}

Den konfigurerte bønnen threadPoolTaskScheduler kan utføre oppgaver asynkront basert på den konfigurerte bassengstørrelsen på 5.

Legg merke til at alle ThreadPoolTaskScheduler relaterte trådnavn blir prefikset med ThreadPoolTaskScheduler.

La oss implementere en enkel oppgave som vi deretter kan planlegge:

klasse RunnableTask implementerer Runnable {privat strengmelding; offentlig RunnableTask (strengmelding) {this.message = melding; } @ Override public void run () {System.out.println (new Date () + "Runnable Task with" + message + "on thread" + Thread.currentThread (). GetName ()); }} 

Vi kan nå enkelt planlegge denne oppgaven som skal utføres av planleggeren:

taskScheduler.schedule (ny Runnabletask ("Spesifikk tid, 3 sekunder fra nå"), ny dato (System.currentTimeMillis + 3000)); 

De oppgaveplanlegger vil planlegge denne kjørbare oppgaven til en kjent dato, nøyaktig 3 sekunder etter gjeldende tid.

La oss nå gå litt mer i dybden med ThreadPoolTaskScheduler planleggingsmekanismer.

3. Planlegg kjørbar oppgave med fast forsinkelse

Planlegging med en fast forsinkelse kan gjøres med to enkle mekanismer:

3.1. Planlegging etter en fast forsinkelse av den siste planlagte utførelsen

La oss konfigurere en oppgave som skal kjøres etter en fast forsinkelse på 1000 millisekunder:

taskScheduler.scheduleWithFixedDelay (new RunnableTask ("Fixed 1 second Delay"), 1000);

De RunnableTask vil alltid løpe 1000 millisekunder senere mellom fullførelsen av en utførelse og starten på den neste.

3.2. Planlegging etter en fast forsinkelse på en bestemt dato

La oss konfigurere en oppgave som skal kjøres etter en fast forsinkelse av en gitt starttid:

taskScheduler.scheduleWithFixedDelay (new RunnableTask ("Current Date Fixed 1 second Delay"), new Date (), 1000);

De RunnableTask vil bli påkalt på den angitte utførelsestiden, hovedsakelig den tiden der @PostConstruct metoden starter og deretter med 1000 millisekunder forsinkelse.

4. Planlegging til fast rente

Det er to enkle mekanismer for planlegging av kjørbare oppgaver til fast hastighet:

4.1. Planlegge RunnableTask til en fast rente

La oss planlegge en oppgave å kjøre på en fast sats på millisekunder:

taskScheduler.scheduleAtFixedRate (ny RunnableTask ("Fast hastighet på 2 sekunder"), 2000);

Den neste RunnableTask vil kjøre alltid etter 2000 millisekunder uansett status for siste kjøring som fortsatt kan kjøre.

4.2. Planlegge RunnableTask til en fast rente fra en gitt dato

taskScheduler.scheduleAtFixedRate (ny RunnableTask ("Fast hastighet på 2 sekunder"), ny dato (), 3000);

De RunnableTask vil kjøre 3000 millisekunder etter gjeldende tid.

5. Planlegging med CronTrigger

CronTrigger brukes til å planlegge en oppgave basert på et cron-uttrykk:

CronTrigger cronTrigger = ny CronTrigger ("10 * * * *?"); 

Den medfølgende utløseren kan brukes til å kjøre en oppgave i henhold til en bestemt spesifisert tråkkfrekvens eller tidsplan:

taskScheduler.schedule (ny RunnableTask ("Cron Trigger"), cronTrigger);

I dette tilfellet RunnableTask vil bli utført i det 10. sekund av hvert minutt.

6. Planlegging med PeriodicTrigger

La oss bruke PeriodicTrigger for å planlegge en oppgave med en fast forsinkelse på 2000 millisekunder:

PeriodicTrigger periodicTrigger = ny PeriodicTrigger (2000, TimeUnit.MICROSECONDS);

Den konfigurerte PeriodicTrigger bønne vil bli brukt til å kjøre en oppgave etter en fast forsinkelse på 2000 millisekunder.

La oss nå planlegge RunnableTask med PeriodicTrigger:

taskScheduler.schedule (ny RunnableTask ("Periodic Trigger"), periodicTrigger);

Vi kan også konfigurere PeriodicTrigger for å bli initialisert med en fast hastighet i stedet for en fast forsinkelse, kan vi også stille en innledende forsinkelse for den første planlagte oppgaven med et gitt millisekunder.

Alt vi trenger å gjøre er å legge til to kodelinjer før returuttalelse på periodicTrigger bønne:

periodicTrigger.setFixedRate (true); periodicTrigger.setInitialDelay (1000);

Vi brukte setFixedRate metode for å planlegge oppgaven til fast hastighet i stedet for med en fast forsinkelse, da setInitialDelay metoden brukes til å angi startforsinkelse bare for den første kjørbare oppgaven som skal kjøres.

7. Konklusjon

I denne raske artikkelen har vi illustrert hvordan du planlegger en kjørbar oppgave ved hjelp av vårstøtten for oppgaver.

Vi så på å kjøre oppgaven med en fast forsinkelse, til en fast hastighet og i henhold til en spesifisert utløser.

Og som alltid er koden tilgjengelig som et Maven-prosjekt i GitHub.


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