`
lxwt909
  • 浏览: 573535 次
  • 性别: 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();
	}
}

 

分享到:
评论

相关推荐

    Spring4.X+Quartz2.X

    而Quartz则是一个功能强大的作业调度库,它允许开发者按计划执行任务,如定时任务或周期性任务。 在标题"Spring4.X+Quartz2.X"中,我们关注的是如何将这两个框架集成到一个项目中,实现基于Spring的定时任务管理。...

    Spring2.x集成Quartz调度框架

    **Spring2.x集成Quartz调度框架** 在Java应用开发中,常常需要进行任务调度,例如定时执行某些业务逻辑。Quartz是一款强大的、开源的作业调度框架,它支持复杂的调度策略和集群环境。Spring框架则提供了良好的企业...

    quartz调度系统工具.zip

    这个"quartz调度系统工具.zip"文件很可能包含了用于简化Quartz配置和管理的实用工具。 Quartz的核心概念包括: 1. **作业(Jobs)**:是实际执行的工作单元,开发者需要自定义Job类来实现特定的任务逻辑。 2. **...

    quartz2.1.x帮助手册

    Quartz是Java平台上的一个开源任务调度框架,它允许开发者创建、管理和执行计划任务。在Quartz 2.1.x版本中,这个强大的工具提供了许多关键功能和改进,以适应各种复杂的调度需求。本帮助手册将深入探讨这些特性和...

    Quartz任务调度器

    Quartz任务调度器是一款强大的开源任务调度框架,广泛应用于Java应用程序中,用于自动化定时任务的执行。它提供了灵活的任务调度机制,使得开发者可以方便地定义、安排和执行各种任务。在与Spring框架整合后,Quartz...

    SpringBoot 整合Quartz(集群)实现定时任务调度

    Quartz提供了`org.quartz.impl.jdbcjobstore.CreateTableUtils`工具类来帮助你完成这一操作。此外,确保所有服务器共享相同的数据库,这样每个scheduler都能看到并协调任务状态。 总之,SpringBoot结合Quartz可以...

    spring任务调度(Quartz )

    3. **调度器配置**:`SchedulerFactoryBean`是Spring对Quartz调度器的包装,它管理所有的触发器和任务。在这里,我们将`cron`触发器添加到调度器中,使得任务与触发器关联起来。 接下来,我们看下服务类和服务的...

    ASP.NET使用Quartz.NET实现定时任务调度

    1. 定义作业类:这是执行实际任务的代码,可以是任何需要按计划执行的操作。 2. 创建触发器:根据需要定义触发器,如设置每天固定时间执行,或者按照一定间隔重复执行。 3. 配置调度器:初始化Quartz.NET调度器,并...

    任务调度框架Quartz

    2.通过 QuartzSchedulerBuilder 工具类创建调度器。 任务调度信息存储 Quartz 提供了多种方式来存储任务调度信息,例如: 1.使用 JDBCJobStore 来存储任务调度信息。 2.使用 RamJobStore 来存储任务调度信息。 ...

    quartz.jar包下载

    总的来说,Quartz.jar是一个强大且灵活的任务调度工具,广泛应用于需要定期执行任务的Java应用程序中,如后台数据处理、报表生成、定时发送邮件等场景。正确理解和使用Quartz,能极大地提高你的工作效率并优化系统...

    quartz2.2.1.jar完整

    总的来说,Quartz是一个强大的任务调度工具,适用于各种需要定时执行任务的应用场景。通过使用Quartz,开发者可以将时间相关的复杂性从应用程序中分离出来,让系统更加灵活和可维护。在2.2.1这个版本中,可能会包含...

    Spring+Quartz实现任务调度的小例子

    Spring框架和Quartz是两个广泛使用的工具,它们可以协同工作以实现复杂和灵活的任务调度。本篇文章将深入探讨如何使用Spring与Quartz结合来创建一个任务调度的小例子。 首先,Spring是一个开源的Java企业级应用开发...

    任务调度系统基于Quartz.net

    总之,Quartz.NET为.NET开发者提供了一个强大的工具,帮助他们构建复杂且灵活的任务调度系统。通过熟练掌握其核心概念和使用方法,我们可以轻松地管理和控制应用程序中的周期性任务,提升系统效率和自动化水平。

    Quartz.Net3.0.X代码

    通过以上信息,我们可以看到Quartz.Net3.0.X为.NET开发者提供了一套强大的工具来管理定时任务,它的灵活性、可靠性和易用性使其成为.NET平台上进行作业调度的理想选择。结合实际项目需求,开发者可以充分利用Quartz...

    C# 控制台Quartz定时任务.doc

    【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...

    Spring 4.2 集成 Quartz2 任务调度示例

    这个版本支持Java 8的新特性,并对核心容器、数据访问/集成、Web、AOP、工具类和测试等多个模块进行了优化。 **三、集成步骤** 1. **添加依赖** 首先,在你的`pom.xml`或`build.gradle`文件中添加Quartz和Spring的...

    定时调度工具类quartz 2.1.7

    Quartz是一款开源的作业调度框架,它为...总之,Quartz 2.1.7作为一款强大的定时调度工具,为Java开发者提供了完善的定时任务解决方案。通过熟练掌握其API和设计理念,可以轻松地在项目中实现复杂的时间驱动业务逻辑。

    利用Quartz实现任务调度的集群

    - **监控和管理**:Quartz提供了多种工具和API用于监控和管理任务调度,包括查看任务状态、暂停或恢复任务、删除任务等。 在实际应用中,Quartz集群能够很好地处理大规模、复杂的定时任务场景,减少了自定义实现的...

    quartz 定时任务调度

    Quartz调度器可以在应用启动时加载这些配置,实现定时任务的自动化执行。 4. **插件部署** TaskManager.Plugins可能指的是Quartz的插件系统,它允许扩展Quartz的功能。Quartz提供了一些内置插件,如JobStore(用于...

    Java任务调度框架Quartz教程实例

    Quartz框架支持创建简单或复杂的调度计划,能够高效地执行从少量到成千上万的任务。 #### 二、Quartz的核心概念 Quartz框架的核心概念主要包括四个部分:Scheduler(任务调度)、Job(任务)、Trigger(触发器)...

Global site tag (gtag.js) - Google Analytics