Creare uno scheduler in Java con Quartz

Mattepuffo's logo
Creare uno scheduler in Java con Quartz

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!


Condividi

Commentami!