是否可以获取有关已执行(已完成)作业的信息?我浏览了javadocs,学习了如何获取JobDetails等但无法找到方法来了解已经执行(并完成)的作业。
任何提示?
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
如果您想跟踪作业的所有执行的详细历史记录,那么您只需进行实施即可跟踪所有这些信息。您可以使用侦听器来实现此目的。
根据您要完成的具体操作,您可以使用JobListeners,TriggerListeners或SchedulerListeners。
对于'global'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();
}
注意:请注意听众可能导致的性能影响。正如Quartz Docs中提到的那样:
可以减缓石英本身的一件事就是使用了很多听众 (TriggerListeners,JobListeners和SchedulerListeners)。时间 花在每个听众身上显然增加了花在“处理”上的时间 工作的执行,在工作的实际执行之外。
此 并不意味着你应该害怕使用听众,它只是 意味着你应该明智地使用它们 - 不要创造一堆 “全球”听众,如果你真的可以做更专业的听众。也 除非你真的需要,否则不要在听众中做“昂贵”的事情 至。还要注意许多插件(例如“历史”插件) 实际上是听众。