2013-10-03 78 views
0

是否有可能获得有关已执行(完成)作业的信息?我浏览了javadoc,学习了如何获取JobDetails等,但无法找到方法来了解已经执行(并完成)的作业。石英API - 了解执行作业

任何提示?

+0

hm,trigger.getPreviousFireTime()我想 –

回答

1

您可以通过下面的代码获得下一个触发的时间,并与cuurent时间相比,如果执行时间是在过去那么作业已经执行:

Scheduler scheduler = new StdSchedulerFactory().getScheduler(); 

    for (String groupName : scheduler.getJobGroupNames()) { 

    for (JobKey jobKey : scheduler.getJobKeys(GroupMatcher.jobGroupEquals(groupName))) { 

     String jobName = jobKey.getName(); 
     String jobGroup = jobKey.getGroup(); 

     //get job's trigger 
     List<Trigger> triggers = (List<Trigger>) scheduler.getTriggersOfJob(jobKey); 
     Date nextFireTime = triggers.get(0).getNextFireTime(); 
     Date currTime = new Date(); 

     if(currTime>nextFireTime)  
     System.out.println("[jobName] : " + jobName + " [groupName] : " 
      + jobGroup + " - " + has already executed); 

     } 

    } 
0

如果你想跟踪所有的详细历史执行工作,那么你只需要做一个实现来跟踪所有这些信息。你可以使用监听器来达到这个目的。

根据您要完成的操作,您可以使用JobListenersTriggerListenersSchedulerListeners

对于“全球性”的JobListener:

<initialize JobListeners> 
public void jobWasExecuted(JobExecutionContext context, JobExecutionException jobException) { 

     try 
     { 
      jobKey = context.getJobDetail().getKey(); 

      schedulerName = context.getScheduler().getSchedulerName(); 
      jobName = jobKey.getName(); 
      groupName = jobKey.getGroup(); 

      //execution 
      Date startDate = context.getFireTime(); 

      //execution time 
      long runTime=context.getJobRunTime(); 

      //execution end 
      long endDateM = startDate.getTime() + runTime; 
      Date endDate = new Date(endDateM); 

      //get more information here 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

注:请对性能的影响听众可以引起变化。如石英文件中提到:

可以本身使用了大量的听众 (TriggerListeners,的JobListener和SchedulerListeners)的石英减缓

一件事。每个听众花费的时间为 显然会增加在作业执行之外“处理” 作业的时间。

这 并不意味着你应该感到害怕使用监听器的,它只是 意味着你应该明智地使用他们 - 不创建一堆 “全球性”的听众,如果你真的能够更加专业化的人。另外 不会在听众中做“昂贵”的事情,除非你真的需要 来。另外请注意,许多插件(例如“历史”插件) 实际上都是侦听器。