2009-01-22 23 views

Respuesta

1

Puede mirar los ejemplos en las carpetas \ src Quartz.Examples.

-1

Primero debe pensar en algunos puntos, si desea usar el Quartz en la memoria o almacenar en una base de datos, se iniciará un servidor, etc. Después de eso, debe crear una clase para administrar su Schedule y otro que contiene el Trabajo que desea ejecutar, lo que estoy diciendo es un ejemplo simple. Demostraré cómo hacerlo en el siguiente escenario: Sqlite para almacenar datos, una clase de trabajo con registro y todo lo demás con registro. Y se ejecutará todos los días a las 10:30 a.m.

su web.config

<add key="quartz.scheduler.instanceName" value="ServerScheduler" /> 
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" /> 
<add key="quartz.threadPool.threadCount" value="10" /> 
<add key="quartz.threadPool.threadPriority" value="2" /> 

<add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" /> 

<add key="quartz.jobStore.dataSource" value="default" /> 
<add key="quartz.dataSource.default.connectionString" value="Data Source=yourdb.db;Version=3;Foreign Keys=ON;" /> 
<add key="quartz.jobStore.tablePrefix" value="QRTZ_" /> 
<add key="quartz.jobStore.clustered" value="false" /> 
<add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" /> 
<add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz" /> 
<add key="quartz.dataSource.default.provider" value="SQLite-1094" /> 
<add key="quartz.jobStore.useProperties" value="true" /> 
<add key="quartz.scheduler.exporter.type" value="Quartz.Simpl.RemotingSchedulerExporter, Quartz" /> 
<add key="quartz.scheduler.exporter.port" value="555" /> 
<add key="quartz.scheduler.exporter.bindName" value="QuartzScheduler" /> 
<add key="quartz.scheduler.exporter.channelType" value="tcp" /> 

Crear una clase llamada Schedule.cs:

public static class Schedule 
{ 

    private static readonly ILog logger = LogManager.GetLogger(typeof(Schedule)); 

    public static ITrigger BuildTrigger(int hour, int minute) 
    { 


     var trigger = TriggerBuilder.Create() 
            .StartNow() 
            .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(hour,minute)) 
            .Build(); 
     return trigger; 
    } 




    public static IScheduler InicializarScheduler() 
    { 


     var scheduleMigracao = Schedule.GetScheduler(); 

     if (!scheduleMigracao.IsStarted) 
      scheduleMigracao.Start(); 

     logger.Info("Scheduler started successfully"); 

     return scheduleMigracao; 
    } 

    public static IJobDetail BuildJogDetail<T>(string WorkFlowId, string Group) where T : IJob 
    { 
     return JobBuilder.Create<T>() 
       .WithIdentity(WorkFlowId, Group) 
       .RequestRecovery() 
       .Build(); 
    } 

    private static IScheduler GetScheduler() 
    { 
     try 
     { 

      IScheduler scheduler = SchedulerRepository.Instance.Lookup("DefaultQuartzScheduler"); 
      if (scheduler == null) 
      { 
       var factoryScheduler = new StdSchedulerFactory(); 

       return factoryScheduler.GetScheduler(); 
      } 
      else 
      { 
       return scheduler; 
      } 
     } 
     catch (Exception ex) 
     { 
      logger.Error("Server initialization failed:" + ex.Message, ex); 
      throw; 
     } 
    } 
} 

Crear una clase llamada TestJob.cs

public class TestJob : IInterruptableJob 
{ 
    private static readonly ILog Log = LogManager.GetLogger(typeof(TestJob)); 

    public void Interrupt() 
    { 

    } 

    public void Execute(IJobExecutionContext context) 
    { 
     try 
     { 

      Log.DebugFormat("{0}****{0}Job {1} Start @ {2} next scheduled for {3}{0}***{0}", 
                    Environment.NewLine, 
                    context.JobDetail.Key, 
                    context.FireTimeUtc.Value.ToString("r"), 
                    context.NextFireTimeUtc.Value.ToString("r")); 


      //implement your logic 


      Log.DebugFormat("{0}****{0}Job {1} executed with sucess at @ {2}", 
                    Environment.NewLine, 
                    context.JobDetail.Key, 
                    context.FireTimeUtc.Value.ToString("r")); 

     } 
     catch (Exception ex) 
     { 

      Log.DebugFormat("{0}***{0}Failed: {1}{0}***{0}", Environment.NewLine, ex.Message); 
     } 
    } 
} 

en su lugar Global.asax :

public class Global : System.Web.HttpApplication 
{ 
    private static void BuildingQuartzMetadataSqLite1090() 
    { 
     var metaData = new DbMetadata(); 
     metaData.AssemblyName = "System.Data.SQLite, Version = 1.0.94.0,Culture=neutral, PublicKeyToken=db937bc2d44ff139"; 
     metaData.BindByName = true; 
     metaData.CommandBuilderType = typeof(System.Data.SQLite.SQLiteCommandBuilder); 
     metaData.CommandType = typeof(System.Data.SQLite.SQLiteCommand); 
     metaData.ConnectionType = typeof(System.Data.SQLite.SQLiteConnection); 
     metaData.ExceptionType = typeof(System.Data.SQLite.SQLiteException); 
     metaData.ParameterDbType = typeof(System.Data.SQLite.TypeAffinity); 
     metaData.ParameterDbTypePropertyName = "DbType"; 
     metaData.ParameterNamePrefix = "@"; 
     metaData.ParameterType = typeof(System.Data.SQLite.SQLiteParameter); 
     metaData.UseParameterNamePrefixInParameterCollection = true; 

     DbProvider.RegisterDbMetadata("SQLite-1094",metaData); 
    } 

    protected void Application_Start(object sender, EventArgs e) 
    { 
      BuildingQuartzMetadataSqLite1090(); 
      Schedule.InicializarScheduler(); 
      Schedule.ScheduleJob(Schedule.BuildJogDetail<TestJob>("TestJob","GrupoTest"), Schedule.BuildTrigger(10, 30)); 
    } 
} 

Cualquier pregunta simplemente pregunte

Cuestiones relacionadas