2013-01-18 35 views
0

我是Quartz的新用戶,希望使用它來爲使用SQL Server Express的客戶端使用服務在SQLServer中安排腳本。根據Quartz中的開始時間在間隔中計劃任務

我需要一個用戶能夠安排任務運行,比如從特定日期開始的第二週。例如:StartDate = 1/Jan/2013 12:00 PM(星期二),每14天重複一次。

在設置的工作,有一個開始時間(日期時間),IntervalUnit(秒,分鐘,小時,日,周,年)和RepeatsEvery(間隔數開始日期後火)。

例如:StartDate =「1/JAN/2013 12:00 PM」和IntervalUnit =「DAY」並且RepeatsEvery = 14的設置,將在每週二的中午12點啓動作業。如果StartDate已經通過,我需要在下一個開始日期開始工作,例如:如果我今天開始服務(2013年1月18日),下一個開始日期爲29/Jan/2013 12:00 PM

我無法弄清楚如何使用日曆觸發器在Quartz中進行這項工作。這是內置Quartz的東西,還是我需要在啓動時計算新的StartTime?

假設我已經計算出一個新的開始時間,有沒有內置函數或整齊的快捷鍵對於這一點,或者我需要類似這樣每個IntervalUnit功能:

'Days 
Dim diff As Integer 
diff = Now.Subtract(.StartTime).TotalDays 
Dim offset As Integer 
offset = .RepeatsEvery - (diff Mod .RepeatsEvery) 
offset = Now.AddDays(offset).Subtract(.StartTime).TotalDays 'Get the days from Start t preserve time of day 
Start = .StartTime.AddDays(offset) 

回答

1

您可以創建一個觸發器然後調用trigger.GetFireTimeAfter(DateTime.Now)來計算新的開始日期,然後使用新的StartDate生成和新的觸發器。

以下是C#,但希望給你的想法

var trigger = TriggerBuilder.Create() 
        .StartAt(new DateTimeOffset(new DateTime(2013,1,1))) 
        .WithSimpleSchedule(x=>x.RepeatForever() 
              .WithInterval(new TimeSpan(14,0,0,0))) 
        .Build();     


var newStartingPoint = trigger.GetFireTimeAfter(DateTime.Now); 

if (newStartingPoint.HasValue) 
{ 
    trigger = ((ISimpleTrigger) trigger).GetTriggerBuilder() 
             .StartAt(newStartingPoint.Value) 
             .Build();  
} 

.GetTriggerBuilder()不提供ITrigger,這就是爲什麼你必須投的觸發ISimpleTrigger,但同樣的原則也適用與其他觸發器。

相關問題