Creare uno schedulatore con poche righe di codice - Quartz.NET

by Andrea Dottor 05 September 2012 22:34

Il bello di fare community è che spesso si ha l’occasione di scambiarsi consigli e link che prima o poi possono tornare utili. Un caso è proprio questo, quello di Quartz.NET, una libreria consigliatami da Davide Senatore ed utile per eseguire del codice a intervalli schedulati.
A molti sarà capitato di scrivere un applicativo che doveva (per esempio) inviare delle mail alle 24.00 di ogni giorno, oppure eseguire qualche operazione ogni x ore…ed ecco che questa libreria ci permette di fare proprio questo, e con veramente poche righe di codice.

Un esempio è il seguente:
Sviluppiamo una classe che conterrà il codice da eseguire in un determinato momento. Per fare ciò è sufficiente creare una classe e fargli implementare Quartz.IJob:

public class MyCustomJob : Quartz.IJob
{
  public MyCustomJob()
  {
  }

  public void Execute(Quartz.IJobExecutionContext context)
  {
    // TODO: implementare il codice che dovrà essere eseguito
  }
}

Se vogliamo far richiamare questa classe ogni 30 minuti, il codice per realizzare lo scheduler sarà il seguente:

ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
IScheduler scheduler = schedulerFactory.GetScheduler();

IJobDetail job = new JobDetailImpl(
                  "MyCustomJob",
                  null,
                  typeof(MyCustomJob));

ITrigger trigger = new Quartz.Impl.Triggers.SimpleTriggerImpl(
              "trigger",
              DateTime.UtcNow,
              null,
              Quartz.Impl.Triggers.SimpleTriggerImpl.RepeatIndefinitely,
              new TimeSpan(0, 30, 0));

scheduler.ScheduleJob(job, trigger);
scheduler.Start();

Come è possibile vedere, Quartz.NET permette di semplificare notevolmente la creazione/esecuzione di job ad eventi programmati. La libreria è molto completa anche dal punto di vista delle configurazioni, il che permette di adattarla ai casi di utilizzo più disparati.

Ed ecco che grazie ad un consiglio “giusto” ho risparmiato (e fatto risparmiare) un bel pò di lavoro.

Tags:

.NET

Comments

19/09/2012 17:19 #

E' fantastico. Lo usa dalla versione 1.
Ma con la 2 puoi scrivere ancora più velocemente:

Dim job = JobBuilder.Create(Of LineeJob).WithIdentity("MyCustomJob").Build
Dim trigger = TriggerBuilder.Create.WithCronSchedule("0 0/10 * * * ?").Build()
scheduler.ScheduleJob(job, trigger)

Ivano Italy |

Comments are closed