我在由SQL Server数据库支持的ASP.NET应用程序中运行Quartz.NET(最新)进程。我有一个管理进程,使用Get all jobs in Quartz.NET 2.0中的代码运行并将当前正在运行的作业的详细信息输出到日志文件。
这是一个示例(和实际)输出:
-----STARTING JOBS STATUS CHECK at 11/28/2015 5:51:06 PM -----
Job group: UPDATE_TRANSFER_FEED_JOB_GROUP
Job name: 155143_UPDATE_TRANSFER_FEED_JOB
Job data - Key: SourceFeedUpdateID, Value: 155143
Description:
Trigger name: 155143_UPDATE_TRANSFER_FEED_JOB
Trigger group: UPDATE_TRANSFER_FEED_JOB_GROUP
Trigger type: SimpleTriggerImpl
Trigger state: Complete
Previous fire time: 11/28/2015 5:41:00 PM
-----FINISHED JOBS STATUS CHECK-----
我会定期看到某些作业显示“触发状态:完成”但从不离开队列(这可能是不正确的术语)。换句话说,每次输出工作状态时,它们都会一直显示在日志中(如上所示),并且它们会无限期地保留在那里。此外,我为这种类型的作业设置了一个作业监听器,我发现对于卡住的作业,监听器 .JobWasExecuted()是从不调用。正如我所料,其他工作完成并从输出中消失。
处理这些卡住的作业的唯一方法是重新启动Web应用程序。重新启动后,侦听器的JobWasExecuted()立即触发,它们显示“Job Requests Recovery = Yes”,并在下次运行作业状态记录时消失。
我有一种感觉,那就是我不了解工作生活和状态。
你能帮我理解吗?
答案 0 :(得分:0)
根据Quartz.Net文档,如果将以下JobDetail.Durable属性设置为true,则不会从队列中删除作业。
“设置属性JobDetail.Durable = true - 指示Quartz在成为”孤儿“时不删除作业(当作业不再具有引用它的触发器时)。” http://www.quartz-scheduler.net/documentation/faq.html