0

次のスケジューリング パターンを必要とするビジネス要件があります。

----t1--------た---------tb---------t2

t1 と t2の間で、製品 A を 10% 割引します。ただし、ネストされた時間枠ta - tbでは、20% 割引します。tbに達したら、t2 まで製品 A の 10% 割引に戻ります。

Quartz ジョブスケジューリングはこれをすぐに実装できますか? ここで、間隔(t1, ta) (ta, tb) および (tb, t2)
の 3 つのジョブをスケジュールすることは避けたいと思います。

4

1 に答える 1

0

Quartz は汎用の Java スケジューリング API であるため、「すぐに使える」アプリケーション固有のビジネス ロジックは付属していません。上記の要件を Quartz で解決する方法は次のとおりです。

  1. 製品ストア (通常はデータベース) に保存されている製品価格を単純に更新する汎用の ProductPriceUpdaterJob Quartz ジョブを作成します。ジョブは、割引率の数字 (つまり、0、10、20) を持つ単一のジョブ データ マップ パラメータ「discount」を想定します。

  2. それぞれ t1、ta、tb、および t2 でジョブを開始する 4 つの Quartz トリガー (T1、Ta、Tb、T2) にジョブを関連付けます。これらのトリガーは、ジョブ データ マップで必要な割引額を指定します (T1 は割引 = 10、Ta は割引 = 20、Tb は割引 = 10、T2 は割引 = 0)。

  3. Quartz を起動してジョブとトリガーを登録すれば完了です。

t1 で、Quartz はトリガー T1 を使用してジョブを開始し、ジョブは製品価格に 10% 割引を適用します。ta で、Quartz はトリガー Ta を使用してジョブを開始し、ジョブは製品価格などに 20% 割引を適用します。

Quartz は 4 つの異なるトリガー タイプをサポートしており、トリガーには CronTrigger タイプを安全に使用できると思います。

割引を適用する製品の ID (複数可) を指定できる別のジョブ データ マップ パラメーターをトリガーで使用することをお勧めします。このようにして、ジョブは真に汎用的になり、すべての製品で使用できるようになります。

于 2016-12-08T10:53:44.777 に答える