2012-03-23 6 views
1

私はQuartzジョブを処理するC#Topshelf Windowsサービスを持っています。これらのジョブは、このように、データベースに格納されています。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 
} 

は、今私は(他のすべてのジョブが繰り返されなければならなかった)1回のみ起動されたジョブを追加する必要があります。私の(一時的な)ソリューションは、CronTriggerフィールドのNULLを残すなどの代わりにCronTriggerのSimpleTriggerでこれらのジョブを開始することです:

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

これを行うには良い解決策はありますか?言い換えれば、CronTriggerは、あなたが一度だけ仕事を始め、それを繰り返さないようにすることです。

答えて

2

解決策の1つは、JobConfiguration抽象クラスを作成し、そのJobConfigurationからSimpleJobConfigurationとCronJobConfigurationを継承させることです。

データベースには、同じテーブルに格納することができます。

他の解決方法は、トリガーのStartTimeUtcとEndTimeUtcをSimpleとCronの両方で使用することです。これにより、30分ごとに実行されるが、DateTime.Now()のトリガーにEndDateUtcが実行されるcronステートメントを作成できます。Add(TimeSpan.FromMinutes(31))。

関連する問題