【问题标题】:JavaQuartz Job persistenceJavaQuartz 作业持久化
【发布时间】:2012-06-25 08:58:08
【问题描述】:

我对 Java Quartz 不太熟悉,我们只是使用了一个每天安排的测试作业。对于我们的 Struts2 Web 应用程序,我们希望运行一些安排在一天中不同时间的日常作业。作业应该处于持久状态,这样即使作业由于服务器关闭/应用程序失败而失败,它们也应该稍后在服务器启动时重新执行。我也可以将作业的状态/结果存储在数据库中,以便监控作业。任何建议都会有所帮助。

-- 谢谢

【问题讨论】:

  • 我相信,Quartz 具备所有这些功能。它当然可以使用持久的作业存储。

标签: java struts2 quartz-scheduler


【解决方案1】:

您提到的任何事情都可以在 Quartz 调度程序中实现,并且已经有一个带有触发器的功能,我们通常称之为 Misfire Instructions这是文档所说的

触发器的另一个重要属性是它的“失火指令”。如果由于调度程序关闭,或者因为 Quartz 的线程池中没有可用的线程来执行作业,持久性触发器“错过”其触发时间,则会发生错误触发。不同的触发器类型有不同的失火指令可供它们使用。默认情况下,他们使用“智能策略”指令——该指令具有基于触发器类型和配置的动态行为。当调度程序启动时,它会搜索任何未触发的持久触发器,然后根据其单独配置的不触发指令更新每个触发器。当您开始在自己的项目中使用 Quartz 时,您应该熟悉在给定触发器类型上定义的 misfire 指令,并在其 JavaDoc 中进行了解释。有关失火指令的更多具体信息将在针对每种触发器类型的教程课程中提供。

关于作业持久化 Quartz 的内置机制很少,您只需将 JobStore 设置为JDBCJobStore

我建议您使用Quartz scheduler document,它非常简单,并且有很多教程和示例可供开始。

如果您的应用程序中没有使用 Spring,则无需添加额外级别的抽象和依赖项。

【讨论】:

  • 查看文档后,我发现 jobStore 负责跟踪您提供给调度程序的所有“工作数据”:作业、触发器、日历等。是否也可以存储jobStore中的Job状态,即结果/执行状态..
  • 任何特定的课程编号。在文档中,我可以找到有关检索调度程序作业的作业状态的详细信息。
  • 为了在我们的 web 应用程序中注册 Quartz,我们必须添加quartz-service.xml。但是在 struts2 项目、src 或 web-inf 中的哪个位置添加它。
  • 你甚至可以使用属性文件并将名称传递给 Quartz 过滤器
  • 这会让你知道做什么和怎么做quartz-scheduler.org/documentation/quartz-2.x/cookbook/…
【解决方案2】:

您可以将 Quartz 与 Sprig batch 结合使用。

前者提供用于管理各种流程的 API(根据您的需要复杂)、作业状态的持久存储以及用于根据作业执行状态监控和重新运行作业的 API。 另一个方便的库是Spring Batch admin。它有网络控制台和 5 分钟指南。

Quartz 用作调度程序作业状态持久性由 Spring 批处理处理。它可以作为独立的 Java 应用程序运行,也可以在 Web/应用程序容器中运行(对我来说,Tomcat 就足够了)。

祝你好运!

【讨论】:

  • 为了使用 Spring Batch Admin,我是否需要在我现有的 Struts2 web-app 中使用 Springs 框架
【解决方案3】:

我们在 Java Quartz 中有 Job stores api。这会将有关作业信息的数据保存在数据库中。所以我想这会对你有所帮助。您可以查看this link 了解代码和数据库结构。

【讨论】:

    猜你喜欢
    • 2021-02-23
    • 1970-01-01
    • 2020-02-23
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    相关资源
    最近更新 更多