En guide til Spring Task Scheduler
1. Oversigt
I denne artikel vil vi diskutere Forårsprogrammeringsmekanismer – TaskScheduler og det er forudbyggede implementeringer sammen med de forskellige udløsere, der skal bruges. Hvis du vil læse mere om planlægning i foråret, skal du kontrollere @Async og @ Planlagt artikler.
TaskScheuler blev introduceret i Spring 3.0 med en række forskellige metoder til at køre på et tidspunkt i fremtiden, returnerer det også et repræsentationsobjekt for Planlagt fremtid interface, som kan bruges til at annullere planlagt opgave eller kontrollere, om den er færdig eller ej.
Alt hvad vi skal gøre er at vælge en kørbar opgave til planlægning og derefter vælge en korrekt planlægningspolitik.
2. ThreadPoolTaskScheduler
ThreadPoolTaskScheduler er velegnet til intern trådhåndtering, da den delegerer opgaver til ScheduledExecutorService og implementerer TaskExecutor interface - så at enkelt forekomst af det er i stand til at håndtere asynkrone potentielle udførelser såvel som @ Planlagt kommentar.
Lad os nu definere ThreadPoolTaskScheduler bønne ved ThreadPoolTaskSchedulerConfig: Den konfigurerede bønne threadPoolTaskScheduler kan udføre opgaver asynkront baseret på den konfigurerede poolstørrelse på 5. Bemærk, at alle ThreadPoolTaskScheduler relaterede trådnavne bliver forud for ThreadPoolTaskScheduler. Lad os implementere en simpel opgave, som vi derefter kan planlægge: Vi kan nu enkelt planlægge, at denne opgave skal udføres af planlæggeren: Det taskScheduler planlægger denne kørbare opgave på en kendt dato, nøjagtigt 3 sekunder efter det aktuelle tidspunkt. Lad os nu gå lidt mere i dybden med ThreadPoolTaskScheduler planlægningsmekanismer. Planlægning med en fast forsinkelse kan udføres med to enkle mekanismer: Lad os konfigurere en opgave, der skal køre efter en fast forsinkelse på 1000 millisekunder: Det RunnableTask kører altid 1000 millisekunder senere mellem afslutningen af en udførelse og starten af den næste. Lad os konfigurere en opgave til at køre efter en fast forsinkelse af et givet starttidspunkt: Det RunnableTask vil blive påberåbt på det specificerede udførelsestidspunkt, som hovedsagelig det tidspunkt, hvor @PostConstruct metoden starter og efterfølgende med 1000 millisekunder forsinkelse. Der er to enkle mekanismer til planlægning af kørbare opgaver til fast hastighed: Lad os planlægge en opgave, der skal køre på en fast sats på millisekunder: Den næste RunnableTask kører altid efter 2000 millisekunder uanset status for den sidste udførelse, der muligvis stadig kører. Det RunnableTask kører 3000 millisekunder efter den aktuelle tid. CronTrigger bruges til at planlægge en opgave baseret på et cron-udtryk: Den medfølgende trigger kan bruges til at køre en opgave i henhold til en bestemt specificeret kadence eller tidsplan: I dette tilfælde er RunnableTask udføres i det 10. sekund i hvert minut. Lad os bruge Periodisk udløser til planlægning af en opgave med en fast forsinkelse af 2000 millisekunder: Den konfigurerede Periodisk udløser bønne ville blive brugt til at køre en opgave efter en fast forsinkelse på 2000 millisekunder. Lad os nu planlægge RunnableTask med Periodisk udløser: Vi kan også konfigurere Periodisk udløser for at blive initialiseret med en fast hastighed i stedet for en fast forsinkelse, kan vi også indstille en indledende forsinkelse for den første planlagte opgave med et givet millisekunder. Alt, hvad vi skal gøre, er at tilføje to linier kode før retursætningen på periodicTrigger bønne: Vi brugte setFixedRate metode til at planlægge opgaven med fast hastighed snarere end med en fast forsinkelse, derefter setInitialDelay Metoden bruges til kun at indstille den indledende forsinkelse for den første opgave, der kan køres. I denne hurtige artikel har vi illustreret, hvordan man planlægger en kørbar opgave ved hjælp af Spring-support til opgaver. Vi kiggede på at køre opgaven med en fast forsinkelse, med en fast sats og i henhold til en specificeret udløser. Og som altid er koden tilgængelig som et Maven-projekt i GitHub.@Configuration @ComponentScan (basePackages = "com.baeldung.taskscheduler", basePackageClasses = {ThreadPoolTaskSchedulerExamples.class}) public class ThreadPoolTaskSchedulerConfig {@Bean public ThreadPoolTaskScheduler threadPoolTaskSchedulerToolTaskSchedulerToolTask threadPoolTaskScheduler.setPoolSize (5); threadPoolTaskScheduler.setThreadNamePrefix ("ThreadPoolTaskScheduler"); return threadPoolTaskScheduler; }}
klasse RunnableTask implementerer Runnable {privat streng besked; offentlig RunnableTask (strengbesked) {this.message = meddelelse; } @ Override public void run () {System.out.println (ny dato () + "Kørbar opgave med" + meddelelse + "på tråd" + Thread.currentThread (). GetName ()); }}
taskScheduler.schedule (ny Runnabletask ("Specifik tid, 3 sekunder fra nu"), ny dato (System.currentTimeMillis + 3000));
3. Planlæg kørbar opgave med fast forsinkelse
3.1. Planlægning efter en fast forsinkelse af den sidste planlagte udførelse
taskScheduler.scheduleWithFixedDelay (new RunnableTask ("Fixed 1 second Delay"), 1000);
3.2. Planlægning efter en fast forsinkelse af en bestemt dato
taskScheduler.scheduleWithFixedDelay (new RunnableTask ("Current Date Fixed 1 second Delay"), new Date (), 1000);
4. Planlægning til en fast sats
4.1. Planlægning af RunnableTask til en fast rente
taskScheduler.scheduleAtFixedRate (ny RunnableTask ("Fast hastighed på 2 sekunder"), 2000);
4.2. Planlægning af RunnableTask til en fast rente fra en given dato
taskScheduler.scheduleAtFixedRate (ny RunnableTask ("Fast hastighed på 2 sekunder"), ny dato (), 3000);
5. Planlægning med CronTrigger
CronTrigger cronTrigger = ny CronTrigger ("10 * * * *?");
taskScheduler.schedule (ny RunnableTask ("Cron Trigger"), cronTrigger);
6. Planlægning med Periodisk udløser
PeriodicTrigger periodicTrigger = ny PeriodicTrigger (2000, TimeUnit.MICROSECONDS);
taskScheduler.schedule (ny RunnableTask ("Periodisk udløser"), periodisk udløser);
periodicTrigger.setFixedRate (sand); periodicTrigger.setInitialDelay (1000);
7. Konklusion