En guide til våroppgaveplanleggeren
1. Oversikt
I denne artikkelen vil vi diskutere Planleggingsmekanismer for våroppgaver – Oppgaveplanlegger 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: 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: Vi kan nå enkelt planlegge denne oppgaven som skal utføres av planleggeren: 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. Planlegging med en fast forsinkelse kan gjøres med to enkle mekanismer: La oss konfigurere en oppgave som skal kjøres etter en fast forsinkelse på 1000 millisekunder: De RunnableTask vil alltid løpe 1000 millisekunder senere mellom fullførelsen av en utførelse og starten på den neste. La oss konfigurere en oppgave som skal kjøres etter en fast forsinkelse av en gitt starttid: De RunnableTask vil bli påkalt på den angitte utførelsestiden, hovedsakelig den tiden der @PostConstruct metoden starter og deretter med 1000 millisekunder forsinkelse. Det er to enkle mekanismer for planlegging av kjørbare oppgaver til fast hastighet: La oss planlegge en oppgave å kjøre på en fast sats på millisekunder: Den neste RunnableTask vil kjøre alltid etter 2000 millisekunder uansett status for siste kjøring som fortsatt kan kjøre. De RunnableTask vil kjøre 3000 millisekunder etter gjeldende tid. CronTrigger brukes til å planlegge en oppgave basert på et cron-uttrykk: Den medfølgende utløseren kan brukes til å kjøre en oppgave i henhold til en bestemt spesifisert tråkkfrekvens eller tidsplan: I dette tilfellet RunnableTask vil bli utført i det 10. sekund av hvert minutt. La oss bruke PeriodicTrigger for å planlegge en oppgave med en fast forsinkelse på 2000 millisekunder: 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: 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: 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. 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.@Configuration @ComponentScan (basePackages = "com.baeldung.taskscheduler", basePackageClasses = {ThreadPoolTaskSchedulerExamples.class}) public class ThreadPoolTaskSchedulerConfig {@Bean public ThreadPoolTaskScheduler threadPoolTaskSchedulerToolTaskSchedulerToolTaskScheduler threadPoolTaskScheduler.setPoolSize (5); threadPoolTaskScheduler.setThreadNamePrefix ("ThreadPoolTaskScheduler"); return threadPoolTaskScheduler; }}
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 ()); }}
taskScheduler.schedule (ny Runnabletask ("Spesifikk tid, 3 sekunder fra nå"), ny dato (System.currentTimeMillis + 3000));
3. Planlegg kjørbar oppgave med fast forsinkelse
3.1. Planlegging etter en fast forsinkelse av den siste planlagte utførelsen
taskScheduler.scheduleWithFixedDelay (new RunnableTask ("Fixed 1 second Delay"), 1000);
3.2. Planlegging etter en fast forsinkelse på en bestemt dato
taskScheduler.scheduleWithFixedDelay (new RunnableTask ("Current Date Fixed 1 second Delay"), new Date (), 1000);
4. Planlegging til fast rente
4.1. Planlegge RunnableTask til en fast rente
taskScheduler.scheduleAtFixedRate (ny RunnableTask ("Fast hastighet på 2 sekunder"), 2000);
4.2. Planlegge RunnableTask til en fast rente fra en gitt dato
taskScheduler.scheduleAtFixedRate (ny RunnableTask ("Fast hastighet på 2 sekunder"), ny dato (), 3000);
5. Planlegging med CronTrigger
CronTrigger cronTrigger = ny CronTrigger ("10 * * * *?");
taskScheduler.schedule (ny RunnableTask ("Cron Trigger"), cronTrigger);
6. Planlegging med PeriodicTrigger
PeriodicTrigger periodicTrigger = ny PeriodicTrigger (2000, TimeUnit.MICROSECONDS);
taskScheduler.schedule (ny RunnableTask ("Periodic Trigger"), periodicTrigger);
periodicTrigger.setFixedRate (true); periodicTrigger.setInitialDelay (1000);
7. Konklusjon