【问题标题】:Design decision for Quartz scheduler ImplementationQuartz 调度器实现的设计决策
【发布时间】:2012-01-27 07:12:48
【问题描述】:

目前我正在为我们的一个项目探索Quartz 调度程序。虽然我仍在探索它,但我有一些疑问。

早些时候,我在一个基于 Java 的电子商务平台上工作,他们以一种非常好的方式实现了 Quartz 调度程序。定义新任务需要以下步骤。

  1. 登录 GUI。
  2. 点击新建按钮,会打开一个页面。
  3. 输入唯一的Job 名称和我们要调用的方法名称。
  4. 我们想要传递的任何参数;如果方法需要它们,则只允许使用原语。
  5. 提供触发器详细信息(时间、日期、月份任何可能的组合)。
  6. 点击保存按钮,我们就可以开始了。

现在这引发了一些问题,因为在 Quartz 中我们必须创建一个应该实现 Job 接口的作业类,并且应该实现它的 execute(JobExecutionContext context) 方法,它将执行这项工作。我想知道平台上的 API 是如何做到这一切的,因为我从未创建过一个必须实现 Job 接口的类。

例如,如果我想创建一个OrderExport 函数,我所做的就是创建一个名为OrderExport 的类,方法是export。然后在调度程序的 UI 中,我只是用作业名称(任何唯一名称)、类名称(例如 OrderExport)、方法名称(例如 export())和触发细节填充了文本框。

任何人都可以建议/指导我他们是如何实现这一目标的吗?

【问题讨论】:

    标签: java scheduled-tasks scheduling quartz-scheduler


    【解决方案1】:

    很可能,电子商务平台使用的是通用作业,它可以获取对组件的引用(也许它是基于工厂的,它有办法访问您的 OrderExport 类?需要静态方法吗?有机会吗?这是哪个电子商务平台?)并通过反射执行请求的方法。

    【讨论】:

    • 它是 Enfinity Suite 6,不,方法根本不需要静态。
    • 那么很可能只是使用反射来实例化您的对象并执行该方法。
    • 您的意思是说他们可能有一个带有execute 方法的通用作业类,并且根据类和方法名称,它可能会使用反射调用该方法?
    • 是的。基本上他们正在使用一些额外的配置来运行你的工作。不基于它构建静态作业实例。有很多方法可以做到这一点,不仅仅是我描述的一种。在 Java6 中,您可以创建一个具有类定义的字符串,在 VM 中编译,然后将该类存储在数据库中(例如)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 2014-02-25
    • 2011-04-18
    相关资源
    最近更新 更多