My Blog

Pianificare l'esecuzione di operazioni mediante Quartz.NET

by lupok on domenica 16 febbraio 2014 04:16

Quartz.NET e' una libreria utile per pianificare l'esecuzione di operazioni ad istanti temporali predefiniti. Per creare un'operazione pianificabile e' necessario: 

  1. Creare uno Scheduler, ovvero l'oggetto responsabile dell'esecuzione delle operazioni al verificarsi delle condizioni stabilite.
  2. Creare un Job, ovvero l'operazione da eseguire al verificarsi delle condizioni. Dal punto di vista informatico occorre creare una classe che implementa l'interfaccia Quartz.IJob. 
  3. Creare un Trigger, ovvero l'oggetto che determina il momento in cui una determinata operazione deve essere eseguita. 

Creo il Job:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Quartz;
using Quartz.Impl;
 
namespace TestQuartz
{
   public class MyJob : IJob
   {
      public void Execute(IJobExecutionContext context)
      {
         Console.WriteLine("MyJob Execute: {0}", context.JobDetail.Key);
      }
   }
}

Quindi configuro l'applicazione per eseguire il job ad instanti precisi:

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Quartz;
using Quartz.Impl;
 
namespace TestQuartz
{
   class Program
   {
      static void Main(string[] args)
      {
         // crea uno schedulerFactory
         ISchedulerFactory schedFact = new StdSchedulerFactory();
 
         // ottiene lo scheduler
         IScheduler sched = schedFact.GetScheduler();
         sched.Start();
 
         IJobDetail job1 = JobBuilder.Create<MyJob>()
             .WithIdentity("myJob1""group1")
             .Build();
 
         IJobDetail job2 = JobBuilder.Create<MyJob>()
             .WithIdentity("myJob2""group1")
             .Build();
 
         // crea un trigger che esegue ogni 5 secondi
         ITrigger trigger1 = TriggerBuilder.Create()
           .WithIdentity("myTrigger1""group1")
           .StartNow()
           .WithSimpleSchedule(x => x
               .WithIntervalInSeconds(5)
               .RepeatForever())
           .Build();
 
         // crea un trigger che esegue ogni giorno alle 15 e 45
         ITrigger trigger2 = TriggerBuilder.Create()
           .WithIdentity("myTrigger2""group1")
           .StartNow()
               .WithDailyTimeIntervalSchedule(x => x
		.WithIntervalInHours(24)    
               .OnEveryDay().StartingDailyAt(new TimeOfDay(15, 45)))
           .Build();
 
         sched.ScheduleJob(job1, trigger1);
         sched.ScheduleJob(job2, trigger2);
 
         Console.WriteLine("Press ENTER to exit");
         Console.ReadLine();
 
         sched.Shutdown(true);
      }
   }
}

 

In questo esempio il job viene eseguito mediante due trigger distinti (si potevano anche creare job differenti associati a trigger differenti), uno che scatta ogni 5 secondi ed uno che scatta alla 15 e 45 di ogni giorno.

 

TestQuartz.zip

Blogs Parent Separator My Blog
Author
lupok

My Blog

Tags