【问题标题】:Quartz.Net scheduler - can completed non-durable jobs be reported on?Quartz.Net 调度程序 - 可以报告已完成的非持久作业吗?
【发布时间】:2015-07-05 19:42:36
【问题描述】:

我正在尝试了解 Quartz 中的工作持久性。根据文档,如果您在创建作业时指定 .StoreDurably() ,即使当前没有触发器,作业也会持续存在(注意我使用的是数据库支持的存储)。这是否意味着如果我指定我无法报告已经完成的工作的持久性?意思是,一旦作业完成并且我退出了触发器的(如果我有)JobHasExecuted() 方法,那么就不再有作业运行的任何记录了吗?

【问题讨论】:

    标签: .net quartz-scheduler scheduler quartz.net quartz.net-2.0


    【解决方案1】:

    一般来说,没有任何作业在调度程序中运行的记录。 Quartz.Net 不跟踪作业历史,而不仅仅是计数。

    如果您没有将作业设置为持久并且所有触发器都已删除或完成,则调度程序将从存储中删除该作业。如果它是持久的并且您查询存储,调度程序将返回作业,但它不会有任何关联的触发器。

    【讨论】:

    • 当您说调度程序将返回作业但它没有任何关联的触发器时,它会告诉我作业执行的单个实例是否成功(完成)?同样相关的是,持久工作的场景/用例是什么?与重新创建工作定义相关的“开销”(因为没有更好的术语)似乎很少,所以我想确保我了解哪些类型的工作可能是持久与不持久的候选人。
    • 调度程序完成运行作业后,获取有关它是否成功完成的任何信息的最佳选择是使用作业侦听器。一旦调度程序通知任何侦听器,它就会清理并且不会保留有关先前执行的信息。我想不出一个适合持久工作的场景。如果您以编程方式添加工作,我从未使用过它们,实际上发现它们会妨碍您。我想如果你总是给它们一个唯一的名字,你可以将它们用作某种历史,比如在名字中添加一个日期时间。
    • 感谢您的意见。我确实在使用侦听器来确定成功或失败(从 Quartz 的角度来看),只需检查 jobException 参数是否为空。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多