`
lxwt909
  • 浏览: 565097 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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(736031305@qq.com)
 * @date 2015年12月10日 下午4:47:12
 *
 */
public class SchedulerUtils {
	//Trigger各种状态:
	//None:Trigger已经完成,且不会在执行,或者找不到该触发器,或者Trigger已经被删除
	//NORMAL:正常状态 
	//PAUSED:暂停状态 
	//COMPLETE:触发器完成,但是任务可能还正在执行中 
	//BLOCKED:线程阻塞状态 
	//ERROR:出现错误

	
	/**
	 * @throws ClassNotFoundException 
	 * @Author: Lanxiaowei(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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(736031305@qq.com)
	 * @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调度系统工具.zip

    quartz调度系统工具.zip

    定时调度工具类quartz 2.1.7

    定时调度工具类,quartz 2.1.7类包,是定时大哥大哥!!!!!

    quartz作业调度

    一个纯 Java 实现的作业调度工具,相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细。版本1.5.2,内附中文帮助文档

    封装通用的Spring3+Struts2+MyBatis3的CRUD+条件分页查询,Spring+Quartz调度,FunctionCharts图像化工具

    封装通用的Spring3+Struts2+MyBatis3的CRUD+条件分页查询,Spring+Quartz调度,FunctionCharts图像化工具 &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    quartz表达式生成器,定时任务表达式

    生成定时任务的表达式,根据条件框选择,可以生成表达式示例,以及列举触发时间,不需要自己再去写quartz表达式了

    quartz.net

    quartz.net .net调度

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    内容提要:Quartz 还为我们提供了几个开箱即用的工具插件:JobInitializationPlugin,JobInitializationPluginMulitple,LogginJobHistoryPlugin,LoggingTriggerHistoryPlugin,ShutdownHookPlugin。 第九章. 使用 ...

    spring chm文档

    13.11.2. 对模型的支持:ModelMap (ModelAndView) 13.11.3. 对视图的支持: RequestToViewNameTranslator 13.12. 其它资源 14. 集成视图技术 14.1. 简介 14.2. JSP和JSTL 14.2.1. 视图解析器 14.2.2. 'Plain-...

    几种任务调度的Java实现方法与比较

    本文由浅入深介绍四种任务调度的Java实现:ScheduledExecutor开源工具包Quartz开源工具包JCronTab此外,为结合实现复杂的任务调度,本文还将介绍Calendar的一些使用方法。Timer相信大家都已经非常熟悉java.util....

    Spring中文帮助文档

    2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)容器 3.1. 简介 3.2. 基本原理 - 容器和bean 3.2.1...

    Spring API

    2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)容器 3.1. 简介 3.2. 基本原理 - 容器和bean 3.2.1....

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. hidden标签...

    Spring 2.0 开发参考手册

    13.9.2. form标签 13.9.3. input标签 13.9.4. checkbox标签 13.9.5. radiobutton标签 13.9.6. password标签 13.9.7. select标签 13.9.8. option标签 13.9.9. options标签 13.9.10. textarea标签 13.9.11. ...

    Python任务调度利器之APScheduler详解

    任务调度应用场景 ...任务调度工具 linux的crontab, 支持按照分钟/小时/天/月/周粒度,执行任务 java的Quartz windows的任务计划 本文介绍的是python中的任务调度库,APScheduler(advance python

    企业后台管理基础框架 hsweb.zip

    自家:hsweb-commons :通用工具类hsweb-easy-orm :为动态表单设计的orm框架hsweb-expands-compress :文件压缩,解压操作hsweb-expands-office :office文档操作( excel读写,模板导出,word模板导出)hsweb-...

    Quartz教程

    -quartz基本上任何公司都会用到调度这个功能, 比如我们公司需要定期执行调度生成报表, 或者比如博客什么的定时更新之类的,都可以靠Quartz来完成。正如官网所说,小到独立应用大到大型电子商务网站, Quartz都能...

    该工程包括邮件发送,quartz调度框架使用,log4j使用,资源文件读取

    该内容为自己写的一个程序,使用quartz调度框架可以定时读取数据库(程序里连的是oracle)发送邮件,本程序用到log4j并对log4j进行了封装,和一个不错的资源文件读取类,一个UtilLj工具类,虽然里面有些方法本程序没有...

    基于SSM+VUE+mysql的 B2C 在线电商项目源码+项目说明.zip

    - 系统任务调度:Quartz ## 前后分离 - 前端框架:NodeJS + Vue + Axios - 前端模板:ElementUI ## 项目截图 ### YMall 商城前台 - 首页 ![](https://yuu-blog.oss-cn-shenzhen.aliyuncs.com/首页.png) ![]...

    cron表达式生成工具

    quartz定时调度表达式生成

    Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice

    12. 提供大量工具类,可以直接使用 13. Maven项目构建,您可以直接做架构,可以提升自己的学习能力,使您成为真正的架构师。 版本支持: 支持版本: jdk 1.6、1.7、1.8 Web容器: Tomcat 6、7、 8 数据库: ...

Global site tag (gtag.js) - Google Analytics