Vodič za proljetni raspored zadataka
1. Pregled
U ovom ćemo članku razgovarati o Proljetni mehanizmi rasporeda zadataka – Planer zadataka i to su unaprijed izgrađene implementacije, zajedno s različitim okidačima za upotrebu. Ako želite pročitati više o zakazivanju u proljeće, provjerite @Async i @ Na rasporedu članaka.
TaskScheuler je predstavljen u proljeće 3.0 s različitim metodama koje će se pokrenuti u nekom trenutku u budućnosti, a također vraća objekt predstavljanja ScheduledFuture sučelje koje se može koristiti za otkazivanje zakazanog zadatka ili provjeru je li to učinjeno ili nije.
Sve što trebamo učiniti je odabrati zadatak koji se može pokrenuti za raspoređivanje, a zatim odabrati odgovarajuću politiku rasporeda.
2. ThreadPoolTaskScheduler
ThreadPoolTaskScheduler je vrlo pogodan za interno upravljanje nitima, jer delegira zadatke na ScheduledExecutorService i provodi Izvršitelj zadatka sučelje - tako da jedna njegova instanca može obraditi asinkrone potencijalne egzekucije kao i @ Na rasporedu bilješka.
Ajmo sada definirati ThreadPoolTaskScheduler grah na ThreadPoolTaskSchedulerConfig: Konfigurirani grah threadPoolTaskScheduler može izvršavati zadatke asinkrono na temelju konfigurirane veličine spremišta od 5. Imajte na umu da svi ThreadPoolTaskScheduler srodna imena niti bit će s prefiksom ThreadPoolTaskScheduler. Izvršimo jednostavan zadatak koji tada možemo zakazati: Sada možemo jednostavno rasporediti ovaj zadatak koji će izvršiti planer: The taskScheduler će zakazati ovaj izvršivi zadatak na poznati datum, točno 3 sekunde nakon trenutnog vremena. Krenimo sada malo dublje s ThreadPoolTaskScheduler mehanizmi rasporeda. Zakazivanje s fiksnim kašnjenjem može se izvršiti s dva jednostavna mehanizma: Konfigurirajmo zadatak koji će se izvoditi nakon fiksnog kašnjenja od 1000 milisekundi: The RunnableTask uvijek će raditi 1000 milisekundi kasnije između završetka jednog izvršenja i početka sljedećeg. Konfigurirajmo zadatak da se izvršava nakon fiksnog kašnjenja zadanog vremena početka: The RunnableTask pozivat će se u određeno vrijeme izvršenja koje uglavnom vrijeme u kojem @PostConstruct metoda započinje i naknadno s kašnjenjem od 1000 milisekundi. Postoje dva jednostavna mehanizma za raspoređivanje izvršivih zadataka po fiksnoj brzini: Zakažimo zadatak koji će se izvoditi na fiksna brzina od milisekundi: Sljedeći RunnableTask pokrenut će se uvijek nakon 2000 milisekundi bez obzira na status zadnjeg izvršenja koje se možda još uvijek izvodi. The RunnableTask pokrenut će 3000 milisekundi nakon trenutnog vremena. CronTrigger koristi se za planiranje zadatka na temelju izraza cron: Navedeni okidač može se koristiti za pokretanje zadatka prema određenoj određenoj kadenci ili rasporedu: U ovom slučaju, RunnableTask izvršit će se 10. sekunde svake minute. Iskoristimo PeriodicTrigger za zakazivanje zadatka pomoću a fiksno kašnjenje od 2000 milisekundi: Konfigurirano PeriodicTrigger bean bi se koristio za pokretanje zadatka nakon određenog kašnjenja od 2000 milisekundi. Sada zakažimo RunnableTask s PeriodicTrigger: Također možemo konfigurirati PeriodicTrigger da se inicijalizira fiksnom brzinom, a ne fiksnom odgodom, također možemo postaviti početno kašnjenje za prvi planirani zadatak u zadanim milisekundama. Sve što trebamo učiniti je dodati dva retka koda prije naredbe return u periodicTrigger grah: Koristili smo setFixedRate metoda za planiranje zadatka prema fiksnoj stopi, a ne prema fiksnom kašnjenju setInitialDelay metoda koristi se za postavljanje početnog kašnjenja samo za prvi izvršivi zadatak. U ovom kratkom članku ilustrirali smo kako zakazati izvršivi zadatak pomoću proljetne podrške za zadatke. Izvršavali smo zadatak s fiksnim kašnjenjem, s fiksnom brzinom i prema zadanom okidaču. I kao i uvijek, kôd je dostupan kao Maven projekt u GitHubu.@Configuration @ComponentScan (basePackages = "com.baeldung.taskscheduler" basePackageClasses = {ThreadPoolTaskSchedulerExamples.class}) public class ThreadPoolTaskSchedulerConfig {@Bean javni ThreadPoolTaskScheduler threadPoolTaskScheduler () {ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler (); threadPoolTaskScheduler.setPoolSize (5); threadPoolTaskScheduler.setThreadNamePrefix ("ThreadPoolTaskScheduler"); vratiti threadPoolTaskScheduler; }}
klasa RunnableTask implementira Runnable {private String message; public RunnableTask (String message) {this.message = message; } @Override public void run () {System.out.println (novi datum () + "Zadatak koji se može izvoditi s" + porukom + "na niti" + Thread.currentThread (). GetName ()); }}
taskScheduler.schedule (novi Runnabletask ("Određeno vrijeme, za 3 sekunde od sada"), novi datum (System.currentTimeMillis + 3000));
3. Zakažite izvršni zadatak s fiksnim kašnjenjem
3.1. Zakazivanje nakon fiksnog kašnjenja zadnjeg planiranog izvršenja
taskScheduler.scheduleWithFixedDelay (novi RunnableTask ("Fiksno kašnjenje od 1 sekunde"), 1000);
3.2. Zakazivanje nakon fiksnog kašnjenja određenog datuma
taskScheduler.scheduleWithFixedDelay (novi RunnableTask ("Fiksni datum kašnjenja od 1 sekunde"), novi datum (), 1000);
4. Zakazivanje po fiksnoj stopi
4.1. Zakazivanje RunnableTask po fiksnoj stopi
taskScheduler.scheduleAtFixedRate (novi RunnableTask ("Fiksna brzina od 2 sekunde"), 2000);
4.2. Zakazivanje RunnableTask po fiksnoj stopi od određenog datuma
taskScheduler.scheduleAtFixedRate (novi RunnableTask ("Fiksna brzina od 2 sekunde"), novi datum (), 3000);
5. Zakazivanje sa CronTrigger
CronTrigger cronTrigger = novi CronTrigger ("10 * * * *?");
taskScheduler.schedule (novi RunnableTask ("Cron Trigger"), cronTrigger);
6. Zakazivanje sa PeriodicTrigger
PeriodicTrigger periodicTrigger = novi PeriodicTrigger (2000, TimeUnit.MICROSECONDS);
taskScheduler.schedule (novi RunnableTask ("Periodični okidač"), periodicTrigger);
periodicTrigger.setFixedRate (true); periodicTrigger.setInitialDelay (1000);
7. Zaključak