2012-03-22 73 views
1

我有一组日期时间(大约5000个元素),并且希望在每个日期时间执行一个作业。 数组中的日期时间是自定义的,不是定期的,所以我不能使用CronTrigger和其他。 有没有简单的方法来创建一个触发器,将在给定时间触发? 是的,我知道我的工作完成后每次都可以开始一个新的简单触发器(一次触发时间,不重复),但这种方式对我来说并不方便。Quartz.net - 自定义时间的触发器

+0

请务必包括您的问题至少一种语言的标签,以帮助确保你的问题是由那些最能帮助你的人发现。另外一定要阅读标签说明,石英标签已折旧。 – 2012-03-23 14:15:40

回答

1

您可以编写自己的触发器并使用它来执行作业。如果您使用的是v1.0,那么您将不得不创建一个扩展Trigger的类。请查看docs了解更多详情。如果你正在运行v2.0,那么你想扩展AbstractTrigger

+0

Greate,我要求**简单**的方式来做到这一点。制作我自己的触发器不是一个简单的方法:( – Sergey 2012-03-24 16:24:11

+0

看一下'SimpleTriggerImpl.cs'的源代码,它确实不是那么糟糕。 – tomfanning 2012-09-11 08:24:50

0

您可以自定义trigger.The简单触发日期时间,这将激发n在您的自定义一倍

public class JobScheduler 
    { 
     public static void Start() 
     { 
      ISchedulerFactory sf = new StdSchedulerFactory(); 
      IScheduler sched = sf.GetScheduler(); 
      DateTime[] Jobtime = new DateTime[5]; //Array Have Job time 
      startDate[0] = new DateTime(2015, 6, 3, 16, 57, 0); 
      startDate[1] = new DateTime(2015, 6, 3, 16, 59, 0); 
      startDate[2] = new DateTime(2015, 6, 3, 17, 1, 0); 
      startDate[3] = new DateTime(2015, 6, 3, 17, 4, 0); 

      for (int i = 1; i < Jobtime.Count(); i++) 
     { 

      sched.Start(); 


      string strjob = "job" + i.ToString(); 
      string strgroup = "group" + i.ToString(); 
      string strtigger = "trigger" + i.ToString(); 

      IJobDetail job = JobBuilder.Create<EmailJob>() 
       .WithIdentity(strjob, strgroup) 
       .Build(); 
      ISimpleTrigger trigger = (ISimpleTrigger)TriggerBuilder.Create() 

       .WithIdentity(strtigger, strgroup) 
       .StartAt(Jobtime[i]) 

       .Build(); 

      sched.ScheduleJob(job, trigger); 

     } 

     } 
    }