2010-08-18 28 views
3

我有幾個在Quartz中設置的作業以設定的時間間隔運行。問題是,當服務啓動時,它會嘗試立即啓動所有作業......是否有一種方法可以使用.xml配置向每個作業添加延遲?Quartz.Net - 延遲一個簡單的觸發器開始

這裏有兩個任務觸發的例子:

<simple> 
    <name>ProductSaleInTrigger</name> 
    <group>Jobs</group> 
    <description>Triggers the ProductSaleIn job</description> 
    <misfire-instruction>SmartPolicy</misfire-instruction> 
    <volatile>false</volatile> 
    <job-name>ProductSaleIn</job-name> 
    <job-group>Jobs</job-group> 
    <repeat-count>RepeatIndefinitely</repeat-count> 
    <repeat-interval>86400000</repeat-interval>   
    </simple> 

<simple> 
    <name>CustomersOutTrigger</name> 
    <group>Jobs</group> 
    <description>Triggers the CustomersOut job</description> 
    <misfire-instruction>SmartPolicy</misfire-instruction> 
    <volatile>false</volatile> 
    <job-name>CustomersOut</job-name> 
    <job-group>Jobs</job-group> 
    <repeat-count>RepeatIndefinitely</repeat-count> 
    <repeat-interval>43200000</repeat-interval> 
    </simple> 

正如你看到有2個觸發器,第一重複每一天,第二天重複,一天兩次。

我的問題是,我想讓第一個或第二個工作在幾分鐘後開始......(因爲它們都是最後,訪問相同的API,我不想超載請求)

是否存在重複延遲或優先級屬性?我找不到任何文檔說明如此。

+0

看起來像有一個優先事項,但它是基於有用的線程..我想設置一個固定的硬延遲。 http://quartznet.sourceforge.net/tutorial/lesson_4.html – dmose 2010-08-18 18:55:50

回答

3

我知道你是通過XML這樣做,但在代碼中你可以設置StartTimeUtc延緩說30秒這樣的...

trigger.StartTimeUtc = DateTime.UtcNow.AddSeconds(30); 
+0

StartTimeUtc沒有setter。 – Joseph 2016-05-19 01:01:50

0

這不正是一個完美的答案對於您的XML文件 - 但通過代碼,您可以在構建觸發器時使用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))