0

是否可以获得有关已执行(完成)作业的信息?我浏览了 javadocs,学习了如何获取 JobDetails 等,但找不到了解已经执行(和完成)的作业的方法。

任何提示?

4

2 回答 2

1

您可以使用以下代码获取下一个触发时间并将其与当前时间进行比较,如果执行时间过去,则作业已经执行:

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);

      }

    }
于 2013-10-03T15:16:10.523 回答
1

如果您想跟踪作业的所有执行的详细历史记录,那么您只需执行一个实现来跟踪所有这些信息。为此,您可以使用侦听器。

根据您要完成的具体任务,您可以使用 JobListenersTriggerListenersSchedulerListeners

对于“全球” JobListeners:

<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();
        }

注意:请注意监听器可能造成的性能影响。如石英文档中所述:

CAN 减慢石英本身的一件事是使用大量侦听器(TriggerListeners、JobListeners 和 SchedulerListeners)。在每个侦听器中花费的时间显然会增加“处理”作业执行所花费的时间,而不是实际执行作业。

这并不意味着你应该害怕使用监听器,它只是意味着你应该明智地使用它们——如果你真的可以制作更专业的监听器,就不要创建一堆“全局”监听器。也不要在听众中做“昂贵”的事情,除非你真的需要。还要注意许多插件(例如“历史”插件)实际上是侦听器。

于 2013-10-11T08:44:36.080 回答