1.通过代码动态获取所有的任务,然后获取任务来判断,这种方法,在集群环境下是不好使的,
因为获取到的任务都是某个实例上的任务:
public static boolean isJobRunning(JobExecutionContext ctx, String jobName, String groupName)
throws SchedulerException {
List currentJobs = ctx.getScheduler().getCurrentlyExecutingJobs();
for (JobExecutionContext jobCtx : currentJobs) {
String thisJobName = jobCtx.getJobDetail().getKey().getName();
String thisGroupName = jobCtx.getJobDetail().getKey().getGroup();
if (jobName.equalsIgnoreCase(thisJobName) && groupName.equalsIgnoreCase(thisGroupName)
&& !jobCtx.getFireTime().equals(ctx.getFireTime())) {
return true;
}
}
return false;
}
//1.这里你还可以使用factory获取scheduler,如果没有groupName的话,只用jobName这一个参数就可以了.
2.判断某个定时任务是否是暂停的状态.
private Boolean isJobPaused(String jobName) throws SchedulerException {
JobKey jobKey = new JobKey(jobName);
JobDetail jobDetail = scheduler.getJobDetail(jobKey);
List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobDetail.getKey());
for (Trigger trigger : triggers) {
TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
if (TriggerState.PAUSED.equals(triggerState)) {
return true;
}
}
return false;
}
3.如果你做了分布式的话,也就是在quartz的配置类中,引入了datasource,并且,数据库中有
quartz的表的话,那么,还可以使用数据库中的表来判断,这种方式是支持分布式的.
QUARTZ_TRIGGERS表中有一个TRIGGER_STATE列
WAITING:等待
PAUSED:暂停
ACQUIRED:正常执行
BLOCKED:阻塞
ERROR:错误
可以看到判断,某个任务的,状态是ACQUIRED就可以了.
编辑
留言与评论(共有 0 条评论) “” |