Quartz.NET - レッスン4:トリガーの詳細

翻訳者注:ディレクトリ内の[翻訳] Quartz.NET 3.xのチュートリアル
翻訳者注:この元でレッスン4:トリガの詳細

ジョブと同様に、Quartz.NETをフルに活用する前に、これらのオプションについて知っておく必要があり、トリガーはかなり簡単に使用することもあるが、それはカスタマイズ可能なさまざまなオプションを含んでいます。また、先に述べたように、トリガの異なるタイプのあなたは、そこにあります私たちは、異なるスケジューリングのニーズを満たすために選択することができます。

一般的なトリガーのプロパティ

フリップフロップTriggerKeyを同定し追跡するためのそれらの特性を有する、他の属性の数が存在するすべてのタイプに加えてTriggerBuilderを使用することができるトリガのすべてのタイプに共通のトリガ(下記の実施例)の構成で定義され、これらの共通の属性を設定します。

以下は、一般的な属性のすべてのフリップフロップタイプのリストです:

  • JobKeyプロパティは、実行をトリガすべきジョブのIDを表します。
  • StartTimeUtcのプロパティは、初めて有効なトリガ・スケジュールを表す。この値は、他の人のためながら、実際には開始時にトリガされるフリップフロップ、フリップフロップの特定のタイプのために使用されるのDateTimeOffsetオブジェクトを定義するために指定されたカレンダの日付の時点でStartTimeUtcプロパティが4月1日に設定されている場合「一日5月あたり」あなたは、このような1月のようスケジュールを含むトリガを、保存することができ、この手段。それはほんの始まりには、スケジュールされた時間に従うマークしなければならない、と入力し、その後、最初のトリガの前に数ヶ月。
  • EndTimeUtcトリガスケジュールが有効でなくなったときに属性が示しています。つまり、フリップフロップ7月1日のための「月額5」と終了時間のタイムスケジュールは、最後の6月5日にトリガーがアクティブになります。

他の特性はさらに説明以下のセクションで説明します。

優先順位

あなたはフリップフロップ(またはあなたのQuartz.NET小さなスレッドプールのワーカースレッド)の多くを持っているとき時々、Quartz.NETはすぐに同じ時間トリガトリガトリガですべてのプログラムに十分なリソースを持っていないかもしれません。これではケースの下で、あなたがトリガー使用可能な最初のQuartz.NETワーカースレッドをトリガーするかを制御することをお勧めします。これを行うには、N個のフリップフロップが同時にトリガされた場合。トリガーの優先順位属性を設定するが、唯一の現在のZできますワーカースレッドが利用可能な、最初の実行Zの最優先でフリップフロップ。あなたが引き金に優先順位を設定しない場合、それは5優先順位は任意の整数値に設定することができ、デフォルトの優先順位を使用しますが、正することができまたは負。

注:トリガーが計画を優先しているのと同じトリガ時間を持っている場合にのみ、常にトリガーの実行中に実行午前10時59分11時00分前にトリガーを誘発します。

注:トリガージョブを復元する必要が検出されると、そのスケジューリング優先順位トリガーオリジナルと同じを再開します。

失火説明

もう一つの重要な属性は、そのトリガー「失火命令」である。スレッドプール内のスケジューラ近い、「逃した」連続トリガを引き起こし、そのトリガー時間、またはQuartz.NETスレッドの操作を実行できない場合は、失火が発生しますトリガの種類はデフォルトで異なる失火命令を使用することができ、彼らは「スマート戦略」命令を使う - スケジューラ開始は、彼女は持続性のいずれかの失敗を検索するときには、トリガータイプと構成に基づいて動的挙動を持っていますフリップフロップ、フリップフロップ、その後、あなたは命令セットを失火のトリガーに型定義を理解しておく必要があり、あなたがあなた自身のプロジェクトでQuartz.NETの使用を開始するときの設定を失火その指示に従って、それらのそれぞれを更新し、そして、そのAPIドキュメントで説明している。失火命令についてのより具体的な情報は、各トリガータイプのためのチュートリアルのコースに説明するために。

カレンダー

クォーツてICalendarインターフェイスを実装しています。スケジューラとトリガに格納されたトリガに関連付けることができ、スケジュールタイムスケジュールフリップフロップNETカレンダーオブジェクトからブロックをトラブルシューティングするための有用なカレンダー。たとえば、あなたはトリガを作成することができ、その後、すべてのビジネスの休日を除外するためにカレンダーを追加、午前9時30分平日の毎日の仕事をトリガーします。

カレンダーは次のように実装してICalendarシリアライズインターフェース、インターフェースてICalendarが定義した任意のオブジェクトであってもよいです。

namespace Quartz
{
    public interface ICalendar
    {
    string Description { get; set; }

    ICalendar CalendarBase { set; get; }

    bool IsTimeIncluded(DateTimeOffset timeUtc);

    DateTime GetNextIncludedTimeUtc(DateTimeOffset timeUtc);

    ICalendar Clone();
    }
}

カレンダーは、時間のミリ秒のような短い期間を「シールド」が、最も可能性の高いあなたがより多くの日に興味を持って「マスク」します。HolidayCalendarのように構築された利便性、Quartz.NETのために、彼女がやっていることであるすることができるにもかかわらずA。

カレンダーは、インスタンス化され、AddCalendar(..)メソッドを介してディスパッチャに登録する必要があります。あなたはHolidayCalendarを使用する場合は、インスタンス化した後、あなたは議題から除外したい追加する彼女のAddExcludedDate(DateTimeの日付)メソッドを使用する必要があります。同じ暦日の例は、以下のような複数のトリガに使用されてもよいです。

栗のために

HolidayCalendar cal = new HolidayCalendar();
cal.AddExcludedDate(someDate);
    
await sched.AddCalendar("myHolidays", cal, false);
    
Trigger t = TriggerBuilder.Create()
    .WithIdentity("myTrigger")
    .ForJob("myJob")
    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(9, 30)) // 每天 9:30 执行作业
    .ModifiedByCalendar("myHolidays") // 指定节假日不执行
    .Build();

// .. schedule job with trigger

ITrigger t2 = TriggerBuilder.Create()
    .WithIdentity("myTrigger2")
    .ForJob("myJob2")
    .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(11, 30)) // 每天 11:30 执行作业
    .ModifiedByCalendar("myHolidays") // 指定节假日不执行
    .Build();
    
// .. schedule job with trigger2 

トリガー建設/建物の詳細は次のいくつかのセクションのカリキュラムに説明する。さて、上記のコードを信じるだけの必要性は2つのトリガーを作成し、毎日のスケジュールを誘発する。また、任意のカレンダーの除外の期間に発生しましたトリガーはスキップされます。

参照Quartz.Impl.Calendar名前空間は、ニーズてICalendar実装のために、より適していることができます。

おすすめ

転載: www.cnblogs.com/taadis/p/quartz-3-x-tutorial-more-about-triggers.html