Quartz如何实现判断某个任务是否正在运行

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


Quartz如何实现判断某个任务是否正在运行


//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;
}


Quartz如何实现判断某个任务是否正在运行


3.如果你做了分布式的话,也就是在quartz的配置类中,引入了datasource,并且,数据库中有


quartz的表的话,那么,还可以使用数据库中的表来判断,这种方式是支持分布式的.


QUARTZ_TRIGGERS表中有一个TRIGGER_STATE列


WAITING:等待
PAUSED:暂停
ACQUIRED:正常执行
BLOCKED:阻塞
ERROR:错误


可以看到判断,某个任务的,状态是ACQUIRED就可以了.


Quartz如何实现判断某个任务是否正在运行

Quartz如何实现判断某个任务是否正在运行

​编辑



发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章