Quartz中的嵌套调度支持

时间:2016-12-08 05:27:56

标签: scheduled-tasks quartz-scheduler job-scheduling quartz

我的业务需求需要以下调度模式

---- -------- T1 TA ------- TB --------- T2

t1和t2 之间,对产品A给予10%的折扣 但是,对于嵌套时间窗口 ta - tb ,请给予20%的折扣。 达到 tb 时,请回到产品A的10%折扣,直到t2。

Quartz作业调度可以实现这个开箱即用吗? 我想避免在这里安排3个工作 - 间隔(t1,ta)(ta,tb)和(tb,t2)。

1 个答案:

答案 0 :(得分:0)

Quartz是一种通用的Java调度API,因此它没有“开箱即用”的任何特定于应用程序的业务逻辑。我用Quartz解决上述要求的方式是这样的:

  1. 创建一个通用的ProductPriceUpdaterJob Quartz作业,它只会更新存储在产品商店(通常是数据库)中的产品价格。该工作将期望单个工作数据映射参数“折扣”与折扣百分比数字(即0,10,20)。

  2. 将作业与分别在t1,ta,tb和t2开始工作的4个Quartz触发器(T1,Ta,Tb,T2)相关联。这些触发器将在其作业数据图中指定所需的折扣金额(T1具有折扣= 10,Ta具有折扣= 20,Tb具有折扣= 10,T2具有折扣= 0)。

  3. 启动Quartz并注册作业并触发它,你就完成了。

  4. 在t1,Quartz使用触发器T1开始你的工作,并且该工作将10%的折扣应用于产品价格。在ta,Quartz使用触发器Ta开始你的工作,你的工作将20%的折扣应用于产品价格等。

    Quartz支持4种不同的触发类型,我认为您可以安全地使用CronTrigger类型作为触发器。

    您可能希望在触发器中使用另一个作业数据映射参数,您可以在其中指定要应用折扣的产品的ID(或ID)。通过这种方式,您的工作将非常通用,可用于您的所有产品。