2013-08-01 59 views
0

我幾乎在c#中完成了簡單的應用程序,它使用石英來定期運行一些SQL查詢。石英中的延遲crone觸發器(不同的第一個開始日期)

我有一個問題,是否有可能創建cron觸發器,在特定日期開始工作,並在此日期之後定期執行一些工作。

這裏是我的代碼:

    IJobDetails myJob = new JobDetails(); //This Constructor needs to be parameterless i nic na to nie poradzimy 
        JobDetailImpl jobDetail = new JobDetailImpl(name, gruoupName, myJob.GetType()); 
        //dodawanie parametru 
        jobDetail.JobDataMap.Add("addParam", item); 
        ////// 
        CronTriggerImpl trigger = new CronTriggerImpl(); 
        trigger.Name = triggerName; 
        trigger.Group = grupa; 
        trigger.CronExpressionString = "0 10 14-15 8 8 ?"; 

        try 
        { 
         _scheduler.ScheduleJob(jobDetail, trigger); 
        } 
        catch 
        { 
         MessageBox.Show("INVALID TRIGGER. JOB CANCELED"); 
        } 
        DateTimeOffset? nextFireTime = trigger.GetNextFireTimeUtc().Value.AddHours(2); 

        Console.WriteLine("Job o jobs_id=" + item.jobs_id + " start:" +  nextFireTime.Value); 

例如: 今天是2013年1月8日,今天我想創建科龍觸發它開始於2013年8月8日,每天觸發SQL查詢從下午2點到每10分鐘下午3:00。

目前我知道如何製作啓動8.08.2013的crone觸發器,並且運行一次,並且知道如何創建每10分鐘從下午2點到下午3點每天運行的第二個觸發器觸發器,但是我仍然不能瞭解如何確定這2個crone觸發器並創建一個:從8.08.2013開始,每天在8.08.2013之後運行,並且每10分鐘從下午2:00到下午3:00每天觸發SQL查詢。

我試着使用:

 trigger.FinalFireTimeUtc(someDate); 
     trigger.SetNextFireTimeUtc(someDate) 

,但沒有任何積極的結果。作爲其cronExpressionString說,作業激發。

非常感謝提前尋求幫助。

回答

0

不知道你正在使用什麼版本的Quartz.net,但有一個可以用2.0設置的「StartTimeUtc」屬性。你可能想嘗試一個。

+0

不幸的是,StartDateUtc沒有設置setter - 至少爲2.2.4(可能更早) – Joseph

1

關鍵在於構建觸發器時使用'StartAt'擴展方法。

/* calculate the next time you want your job to run - in this case top of the next hour */ 
var hourFromNow = DateTime.UtcNow.AddHours(1); 
var topOfNextHour = new DateTime(hourFromNow.Year, hourFromNow.Month, hourFromNow.Day, hourFromNow.Hour, 0, 0); 

/* build your trigger and call 'StartAt' */ 
TriggerBuilder.Create().WithIdentity("Delayed Job").WithSimpleSchedule(x => x.WithIntervalInSeconds(60).RepeatForever()).StartAt(new DateTimeOffset(topOfNextHour))