2015-01-14 41 views
0

我正在处理用Quartz预定的服务器作业。目前,我们正试图找到一种方法来在工作完成时通知用户。我试图使用JobListener.jobWasExecuted()方法,但它似乎在作业完成执行后立即调用,但是在调用execute方法之后(以及在返回之前)。什么时候调用quartz Scheduler JobListener.jobWasExecuted()方法?

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

如果有任何其他建议我可以做到这一点,将不胜感激。

在此先感谢!

编辑: 看完它后,它看起来像监听程序正常运行(jobWasExecuted()被调用,一旦执行方法返回)除了第一个实例的作业。我们有几个同时运行的同一个作业的实例。这有什么理由呢?

回答

0

另一种方法是检查作业是否正在运行。您可以使用下面的方法来确定您的工作是否在工作班上运行。

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

+0

如果我找不到第一个作业侦听程序无法正常工作的原因,此答案将是一个很好的解决方法。谢谢回答! – dhouston

0

我发现这个问题。我开始的工作不属于我使用的小组的一部分。这造成了一些奇怪的行为。一旦我删除了开始额外工作的线路,一切开始按预期工作

0

我有点类似的问题。由于作业监听者的名称属性重复,实际上正在提出;这应该是独一无二的。

jobWasExecuted()方法在作业的执行方法完成其工作后被调用。粗略地调用层次是这样

  1. Listener-> jobToBeExecuted()
  2. 作业 - >执行()
  3. Listener-> jobWasExecuted()

PS:虽然有点迟,但可能对某人有帮助。:D