2013-10-03 79 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)的石英減緩

一件事。每個聽衆花費的時間爲 顯然會增加在作業執行之外「處理」 作業的時間。

這 並不意味着你應該感到害怕使用監聽器的,它只是 意味着你應該明智地使用他們 - 不創建一堆 「全球性」的聽衆,如果你真的能夠更加專業化的人。另外 不會在聽衆中做「昂貴」的事情,除非你真的需要 來。另外請注意,許多插件(例如「歷史」插件) 實際上都是偵聽器。