Quartz2.x任务计划调度操作工具类

       根据Quartz2.2.1版本封装的工具类,记录与此用于备忘:

package com.yida.framework.base.util.quartz;

import java.util.ArrayList;
import java.util.List;

import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger.TriggerState;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.matchers.GroupMatcher;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

import com.yida.framework.base.util.AppUtil;
import com.yida.framework.modules.po.Task;
import com.yida.framework.modules.po.TaskGroup;
import com.yida.framework.modules.po.TaskSchedule;

/**
 * @ClassName: SchedulerUtils
 * @Description: Quartz任务计划调度工具类
 * @author Lanxiaowei([email protected])
 * @date 2015年12月10日 下午4:47:12
 *
 */
public class SchedulerUtils {
	//Trigger各种状态:
	//None:Trigger已经完成,且不会在执行,或者找不到该触发器,或者Trigger已经被删除
	//NORMAL:正常状态 
	//PAUSED:暂停状态 
	//COMPLETE:触发器完成,但是任务可能还正在执行中 
	//BLOCKED:线程阻塞状态 
	//ERROR:出现错误

	
	/**
	 * @throws ClassNotFoundException 
	 * @Author: Lanxiaowei([email protected])
	 * @Title: addTaskSchedule
	 * @Description: 添加任务计划
	 * @param @param taskSchedule
	 * @param @return
	 * @param @throws SchedulerException
	 * @return int
	 * @throws
	 */
	public static int addTaskSchedule(TaskSchedule taskSchedule) throws SchedulerException, ClassNotFoundException {
		Task task = taskSchedule.getTask();
		if(null == task) {
			//任务计划尚未绑定任务
			return -1;
		}
		TaskGroup group = task.getGroup();
		String groupName = null;
		if(null != group) {
			groupName = group.getTaskGroupName();
		} else {
			groupName = BaseTask.DEFAULT_GROUP;
		}
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
		
		TriggerKey triggerKey = TriggerKey.triggerKey(taskSchedule.getScheduleName(), 
			groupName);
		CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
		
		if (null == trigger) {
			//这里是任务类的class
			JobDetail jobDetail = JobBuilder.newJob((Class<? extends Job>) Class.forName(task.getTaskClass()))
				.withIdentity(taskSchedule.getScheduleName(), groupName).build();
			String uniqueKey = taskSchedule.getScheduleName() + "#$#" + task.getTaskName() 
				+ "#$#" + groupName;
			jobDetail.getJobDataMap().put(uniqueKey, taskSchedule);
			//表达式调度构建器
			CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(taskSchedule
				.getCronExpression());
			trigger = TriggerBuilder.newTrigger().withIdentity(taskSchedule.getScheduleName(), groupName)
				.withSchedule(scheduleBuilder).build();
			scheduler.scheduleJob(jobDetail, trigger);
		} else {
			CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(taskSchedule
				.getCronExpression());
			trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
				.withSchedule(scheduleBuilder).build();
			scheduler.rescheduleJob(triggerKey, trigger);
		}
		return 1;
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: pauseJob
	 * @Description: 暂停任务计划
	 * @param @param taskScheduleName     任务计划名称
	 * @param @param taskGroupName        任务分组名称
	 * @param @throws SchedulerException
	 * @return void
	 * @throws
	 */
	public static void pauseJob(String taskScheduleName,String taskGroupName) throws SchedulerException {
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
        JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);
        scheduler.pauseJob(jobKey);
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: pauseJob
	 * @Description: 批量暂停任务计划
	 * @param @param groupMatcher
	 * @param @throws SchedulerException
	 * @return void
	 * @throws
	 */
	public static void pauseJob(GroupMatcher<JobKey> groupMatcher) throws SchedulerException {
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
		//GroupMatcher创建示例,groupContains即任务分组名称中包含指定字符的任务计划全部暂停
		//GroupMatcher<JobKey> groupMatcher = GroupMatcher.groupContains("xxxx");
        scheduler.pauseJobs(groupMatcher);
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: pauseAllJob
	 * @Description: 暂停所有任务计划
	 * @param @throws SchedulerException
	 * @return void
	 * @throws
	 */
	public static void pauseAllJob() throws SchedulerException {
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.pauseAll();
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: resumeJob
	 * @Description: 恢复任务计划
	 * @param @param taskScheduleName     任务计划名称
	 * @param @param taskGroupName        任务分组名称
	 * @param @throws SchedulerException
	 * @return void
	 * @throws
	 */
	public static void resumeJob(String taskScheduleName,String taskGroupName) throws SchedulerException {
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
        JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);
        scheduler.resumeJob(jobKey);
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: resumeAllJob
	 * @Description: 恢复所有任务计划
	 * @param @throws SchedulerException
	 * @return void
	 * @throws
	 */
	public static void resumeAllJob() throws SchedulerException {
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.resumeAll();
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: deleteJob
	 * @Description: 删除任务计划
	 * @param @param taskScheduleName
	 * @param @param taskGroupName
	 * @param @throws SchedulerException
	 * @return void
	 * @throws
	 */
	public static void deleteJob(String taskScheduleName,String taskGroupName) throws SchedulerException {
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
        JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);
        scheduler.deleteJob(jobKey);
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: deleteJob
	 * @Description: 批量删除任务计划
	 * @param @param taskScheduleList
	 * @param @throws SchedulerException
	 * @return void
	 * @throws
	 */
	public static void deleteJob(List<TaskSchedule> taskScheduleList) throws SchedulerException {
		if(null == taskScheduleList || taskScheduleList.size() <= 0) {
			return;
		}
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
		List<JobKey> jobKeyList = new ArrayList<JobKey>();
		for(TaskSchedule taskSchedule : taskScheduleList) {
			Task task = taskSchedule.getTask();
			if(null == task) {
				continue;
			}
			String taskGroupName = null;
			TaskGroup group = task.getGroup();
			if(null != group) {
				taskGroupName = group.getTaskGroupName();
			} else {
				taskGroupName = BaseTask.DEFAULT_GROUP;
			}
			String taskScheduleName = taskSchedule.getScheduleName();
			JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);
			jobKeyList.add(jobKey);
		}
		scheduler.deleteJobs(jobKeyList);
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: cancleJob
	 * @Description: 取消任务计划
	 * @param @param taskScheduleName
	 * @param @param taskGroupName
	 * @param @throws SchedulerException
	 * @return void
	 * @throws
	 */
	public static void cancleJob(String taskScheduleName,String taskGroupName) throws SchedulerException {
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
		TriggerKey triggerKey = TriggerKey.triggerKey(taskScheduleName,taskGroupName);
        scheduler.unscheduleJob(triggerKey);
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: canleJob
	 * @Description: 批量取消任务计划
	 * @param @param taskScheduleList
	 * @param @throws SchedulerException
	 * @return void
	 * @throws
	 */
	public static void canleJob(List<TaskSchedule> taskScheduleList) throws SchedulerException {
		if(null == taskScheduleList || taskScheduleList.size() <= 0) {
			return;
		}
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
		List<TriggerKey> triggerKeyList = new ArrayList<TriggerKey>();
		for(TaskSchedule taskSchedule : taskScheduleList) {
			Task task = taskSchedule.getTask();
			if(null == task) {
				continue;
			}
			String taskGroupName = null;
			TaskGroup group = task.getGroup();
			if(null != group) {
				taskGroupName = group.getTaskGroupName();
			} else {
				taskGroupName = BaseTask.DEFAULT_GROUP;
			}
			String taskScheduleName = taskSchedule.getScheduleName();
			TriggerKey triggerKey = TriggerKey.triggerKey(taskScheduleName,taskGroupName);
			triggerKeyList.add(triggerKey);
		}
		scheduler.unscheduleJobs(triggerKeyList);
	}
	
	/**
	 * @Author: Lanxiaowei([email protected])
	 * @Title: checkJobExist
	 * @Description: 检测任务计划是否存在
	 * @param @param taskScheduleName
	 * @param @param taskGroupName
	 * @param @return
	 * @param @throws SchedulerException
	 * @return boolean
	 * @throws
	 */
	public static boolean checkJobExist(String taskScheduleName,String taskGroupName) throws SchedulerException {
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
		JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);
		return scheduler.checkExists(jobKey);
	}
	
	/**
	 * @throws SchedulerException 
	 * @Author: Lanxiaowei([email protected])
	 * @Title: returnJobState
	 * @Description: 返回任务计划的运行状态 
	 *               BLOCKED:5
     *               ERROR:4
     *               COMPLETE:3
     *               PAUSED:2
     *               NORMAL:1
     *               NONE:0
	 * @param @param taskScheduleName
	 * @param @param taskGroupName
	 * @param @return
	 * @return int
	 * @throws
	 */
	public static int returnJobState(String taskScheduleName,String taskGroupName) throws SchedulerException {
		SchedulerFactoryBean schedulerFactory = 
				(SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");
		Scheduler scheduler = schedulerFactory.getScheduler();
		TriggerKey triggerKey = TriggerKey.triggerKey(taskScheduleName,taskGroupName);
		return scheduler.getTriggerState(triggerKey).ordinal();
	}
}

 

你可能感兴趣的:(quartz)