Creare uno scheduler in Java con Quartz
Quartz è un ottimo schedulatore ricco di funzioni per Java.
Con questa libreria possiamo creare scheduler di vario tipo, facendo in modo di eseguire determinate operazioni a daterminati orari e intervalli di tempo.
Vediamo un esempio semplice; se usate Maven, prima di tutto aggiungete questo al vostro pom.xml:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.3</version>
</dependency>
Compilate il programma per scaricare la libreria.
Poi dobbiamo creare una classe che eseguirà l'operazione che ci interessa:
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class TestJob implements Job {
@Override
public void execute(JobExecutionContext jec) throws JobExecutionException {
System.out.println("Questo è un job di test per Quartz!");
}
}
Ovviamente è un esempio banale.
A questo punto avviamo il nostro job:
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
public class Main {
public static void main(String[] args) throws SchedulerException {
JobDetail job = JobBuilder.newJob(TestJob.class).withIdentity("nomeJob", "group1").build();
Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("nomeJob", "group1")
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5).
withRepeatCount(3)) // 4 RIPETIZIONI IN TOTALE
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
Come scheduler, possiamo usare il SimpleScheduleBuilder, o il CronScheduleBuilder, che ha una sintassi simile al CRON di Unix / Linux.
In questo esempio abbiamo impostato un intervallo di 5 secondi, e tre ripetizioni (che nel totale saranno 4 compresa la prima).
Una variante può essere questa:
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(5)
.repeatForever())
Sempre ogni 5 secondi, ma all'infinito.
Infine un esempio con CronScheduleBuilder che equivale a quello sopra:
.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
Come vedete in stile CRON.
Come vedete, l'utilizzo della libreria è molto semplice.
Qui trovate la documentazione ufficiale con vari altri esempi.
Enjoy!
java quartz scheduler cronschedulebuilder simpleschedulebuilder
Commentami!