Een gids voor de Spring Task Scheduler
1. Overzicht
In dit artikel bespreken we de Mechanismen voor het plannen van taken in de lente – Taakplanner en het zijn vooraf gebouwde implementaties samen met de verschillende te gebruiken triggers. Als je meer wilt lezen over roosteren in het voorjaar, kijk dan op @Async en @Verwacht Lidwoord.
TaskScheuler werd geïntroduceerd in Spring 3.0 met een verscheidenheid aan methoden die op een bepaald moment in de toekomst kunnen worden uitgevoerd, het retourneert ook een representatieobject van Geplande toekomst interface, die kan worden gebruikt om geplande taken te annuleren of om te controleren of deze is voltooid of niet.
Het enige wat we hoeven te doen is een uitvoerbare taak selecteren voor planning en vervolgens een geschikt planningsbeleid selecteren.
2. ThreadPoolTaskScheduler
ThreadPoolTaskScheduler is zeer geschikt voor het beheer van interne schroefdraden, aangezien het taken delegeert aan het ScheduledExecutorService en implementeert het Taakuitvoerder interface - zodat een enkele instantie ervan zowel asynchrone potentiële uitvoeringen als de @Verwacht annotatie.
Laten we nu definiëren ThreadPoolTaskScheduler boon bij ThreadPoolTaskSchedulerConfig: De geconfigureerde boon threadPoolTaskScheduler kan taken asynchroon uitvoeren op basis van de geconfigureerde poolgrootte van 5. Merk op dat alles ThreadPoolTaskScheduler gerelateerde threadnamen worden voorafgegaan door ThreadPoolTaskScheduler. Laten we een eenvoudige taak implementeren die we vervolgens kunnen plannen: We kunnen deze taak nu eenvoudig plannen zodat deze door de planner wordt uitgevoerd: De taakplanner zal deze uitvoerbare taak plannen op een bekende datum, precies 3 seconden na de huidige tijd. Laten we nu wat dieper ingaan op de ThreadPoolTaskScheduler planningsmechanismen. Plannen met een vaste vertraging kan worden gedaan met twee eenvoudige mechanismen: Laten we een taak configureren om te worden uitgevoerd na een vaste vertraging van 1000 milliseconden: De RunnableTask zal altijd 1000 milliseconden later draaien tussen de voltooiing van de ene uitvoering en het begin van de volgende. Laten we een taak configureren om te worden uitgevoerd na een vaste vertraging van een bepaalde starttijd: De RunnableTask wordt aangeroepen op de opgegeven uitvoeringstijd, voornamelijk de tijd waarin @PostConstruct methode start en vervolgens met 1000 milliseconden vertraging. Er zijn twee eenvoudige mechanismen voor het plannen van uitvoerbare taken tegen een vast tarief: Laten we een taak plannen om uit te voeren op een vaste snelheid van milliseconden: De volgende RunnableTask wordt altijd uitgevoerd na 2000 milliseconden, ongeacht de status van de laatste uitvoering die mogelijk nog actief is. De RunnableTask loopt 3000 milliseconden na de huidige tijd. CronTrigger wordt gebruikt om een taak te plannen op basis van een cron-expressie: De meegeleverde trigger kan worden gebruikt om een taak uit te voeren volgens een bepaalde opgegeven cadans of schema: In dit geval is het RunnableTask wordt uitgevoerd op de 10e seconde van elke minuut. Laten we gebruiken PeriodicTrigger voor het plannen van een taak met een vaste vertraging van 2000 milliseconden: De geconfigureerde PeriodicTrigger bean zou worden gebruikt om een taak uit te voeren na een vaste vertraging van 2000 milliseconde. Laten we nu het RunnableTask met de PeriodicTrigger: We kunnen ook configureren PeriodicTrigger om te worden geïnitialiseerd met een vaste snelheid in plaats van een vaste vertraging, kunnen we ook een initiële vertraging instellen voor de eerste geplande taak met een gegeven milliseconden. Het enige wat we hoeven te doen is twee regels code toe te voegen vóór de return-instructie op de periodicTrigger Boon: We gebruikten de setFixedRate methode om de taak in te plannen met een vast tarief in plaats van met een vaste vertraging setInitialDelay methode wordt gebruikt om de initiële vertraging alleen in te stellen voor de eerste uitvoerbare taak die moet worden uitgevoerd. In dit korte artikel hebben we geïllustreerd hoe u een uitvoerbare taak kunt plannen met behulp van de Spring-ondersteuning voor taken. We hebben gekeken naar het uitvoeren van de taak met een vaste vertraging, tegen een vaste snelheid en volgens een gespecificeerde trigger. En, zoals altijd, is de code beschikbaar als een Maven-project in GitHub.@Configuration @ComponentScan (basePackages = "com.baeldung.taskscheduler", basePackageClasses = {ThreadPoolTaskSchedulerExamples.class}) openbare klasse ThreadPoolTaskSchedulerConfig {@Bean openbare ThreadPoolTaskScheduler threadPoolTaskScheduler (threadPoolTaskScheduler) threadPoolTaskScheduler.setPoolSize (5); threadPoolTaskScheduler.setThreadNamePrefix ("ThreadPoolTaskScheduler"); terug threadPoolTaskScheduler; }}
klasse RunnableTask implementeert Runnable {privé String-bericht; openbare RunnableTask (String-bericht) {this.message = bericht; } @Override public void run () {System.out.println (nieuwe datum () + "Runnable Task with" + message + "on thread" + Thread.currentThread (). GetName ()); }}
taskScheduler.schedule (nieuwe Runnabletask ("Specifieke tijd, 3 seconden vanaf nu"), nieuwe datum (System.currentTimeMillis + 3000));
3. Plan een uitvoerbare taak met vaste vertraging
3.1. Planning na een vaste vertraging van de laatste geplande uitvoering
taskScheduler.scheduleWithFixedDelay (nieuwe RunnableTask ("Fixed 1 second Delay"), 1000);
3.2. Planning na een vaste vertraging van een specifieke datum
taskScheduler.scheduleWithFixedDelay (nieuwe RunnableTask ("Huidige datum vast 1 seconde vertraging"), nieuwe datum (), 1000);
4. Plannen tegen een vast tarief
4.1. Plannen van het RunnableTask tegen een vast tarief
taskScheduler.scheduleAtFixedRate (nieuwe RunnableTask ("Vaste snelheid van 2 seconden"), 2000);
4.2. Plannen van het RunnableTask tegen een vast tarief vanaf een bepaalde datum
taskScheduler.scheduleAtFixedRate (nieuwe RunnableTask ("Vaste snelheid van 2 seconden"), nieuwe datum (), 3000);
5. Plannen met CronTrigger
CronTrigger cronTrigger = nieuwe CronTrigger ("10 * * * *?");
taskScheduler.schedule (nieuwe RunnableTask ("Cron Trigger"), cronTrigger);
6. Plannen met PeriodicTrigger
PeriodicTrigger periodicTrigger = nieuwe PeriodicTrigger (2000, TimeUnit.MICROSECONDS);
taskScheduler.schedule (nieuwe RunnableTask ("Periodic Trigger"), periodicTrigger);
periodicTrigger.setFixedRate (true); periodicTrigger.setInitialDelay (1000);
7. Conclusie