2012-03-23 100 views
1

我有一個處理Quartz Jobs的C#Topshelf窗口服務。這些作業存儲在數據庫中,這樣的:帶Crontrigger的非重複石英作業?

public class JobConfiguration : IJobConfiguration { 
    public string Name { get; set; }   //ImportService 
    public string Type { get; set; }   //[ClassName, AssemblyName] 
    public string CronTrigger { get; set; } //example: 0 0 12 * * ? 
    public string CronMeaning { get; set; } //example: fire at noon every day 
} 

現在我要補充一份工作,僅觸發一次(所有其他工作都必須重複)。我的(臨時)解決方案是離開CronTrigger場空,並開始與一個SimpleTrigger,而不是像CronTrigger這些工作:

if (JobConfiguration.CronTrigger == Null) 
    //start job with Quartz SimpleTrigger 
else 
    //start job with Quartz CronTrigger 

有沒有更好的解決辦法做到這一點?換句話說:是否有一個CronTrigger允許您只開始一次工作而不再重複它。

回答

2

一個解決方案是製作JobConfiguration抽象,並具有從該JobConfiguration繼承的SimpleJobConfiguration和CronJobConfiguration。

在數據庫中,它們可以存儲在同一個表中。

另一種解決方案是使用SimpleTime和Cron觸發器的StartTimeUtc和EndTimeUtc。這允許您創建一個每30分鐘運行一次的cron語句,但在DateTime.Now()。Add(TimeSpan.FromMinutes(31))的觸發器上使用EndDateUtc。