【问题标题】:Nested scheduling support in QuartzQuartz 中的嵌套调度支持
【发布时间】:2017-04-23 06:37:34
【问题描述】:

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

----t1--------ta--------tb---------t2

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

Quartz 作业调度能否开箱即用地实现这一点?
我想避免在这里安排 3 个作业 - 间隔 (t1, ta) (ta, tb) 和 (tb, t2)。

【问题讨论】:

  • ahuman,如果满足您的要求,请您检查我的答案并接受它,如果没有,请提供更多详细信息。谢谢。

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


【解决方案1】:

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(或多个 ID)。这样,您的工作将是真正通用的并且适用于您的所有产品。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多