什么时候调用石英调度程序 JobListener.jobWasExecuted() 方法



我正在处理与 Quartz 一起安排的服务器作业。目前,我们正在尝试找到一种方法在作业完成时通知用户。我试图使用 JobListener.jobWasExecuted() 方法,但现在似乎在作业完成执行时调用它,但在调用执行方法之后(在它返回之前)。

这是正确的行为还是我做错了什么?

如果关于我如何实现这一目标的任何其他建议,将不胜感激。

提前感谢!

编辑:在进一步查看之后,看起来侦听器在执行方法返回后被调用)对于除了作业的第一个实例之外的所有内容都正常运行(jobWasExecuted()。我们有多个同时运行的同一作业的实例。有什么理由会这样吗?

另一种方法是检查作业当前是否正在运行。您可以使用以下方法来确定作业是否在作业类中运行。

private boolean isJobRunning(JobExecutionContext ctx) throws SchedulerException
{
    List<JobExecutionContext> jobs = ctx.getScheduler().getCurrentlyExecutingJobs();
    for (JobExecutionContext job : jobs)
    {
        // check if the current job is already running (make sure to check that fire times are different so that a different
        // instance of the same job is checked)
        if (job.getJobDetail().getJobClass().getName().equals(this.getClass().getName()) && !job.getFireTime().equals(ctx.getFireTime()))
        {
            return true;
        }
    }
    return false;
}

从链接复制粘贴:http://wordgraphs.com/post/607/Checking-if-a-Quartz-job-is-already-running

我遇到了一些类似的问题。这实际上是由于作业侦听器的 name 属性重复而引发的;这应该是唯一的。

侦听器的 jobWasExecuted() 方法在作业的执行方法完成其工作后被调用。调用层次结构大致是这样的

  1. Listener->jobToBeExecuted()
  2. Job->execute()
  3. Listener->jobWasExecuted()

PS:虽然有点晚了,但可能对某人有帮助.:D

我发现了问题。我开始了一份不属于我正在使用的小组的工作。这导致了一些奇怪的行为。一旦我删除了启动额外工作的行,一切都开始按预期工作

相关内容

最新更新