根据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则是一个功能强大的作业调度库,它允许开发者按计划执行任务,如定时任务或周期性任务。 在标题"Spring4.X+Quartz2.X"中,我们关注的是如何将这两个框架集成到一个项目中,实现基于Spring的定时任务管理。...
**Spring2.x集成Quartz调度框架** 在Java应用开发中,常常需要进行任务调度,例如定时执行某些业务逻辑。Quartz是一款强大的、开源的作业调度框架,它支持复杂的调度策略和集群环境。Spring框架则提供了良好的企业...
这个"quartz调度系统工具.zip"文件很可能包含了用于简化Quartz配置和管理的实用工具。 Quartz的核心概念包括: 1. **作业(Jobs)**:是实际执行的工作单元,开发者需要自定义Job类来实现特定的任务逻辑。 2. **...
Quartz是Java平台上的一个开源任务调度框架,它允许开发者创建、管理和执行计划任务。在Quartz 2.1.x版本中,这个强大的工具提供了许多关键功能和改进,以适应各种复杂的调度需求。本帮助手册将深入探讨这些特性和...
Quartz任务调度器是一款强大的开源任务调度框架,广泛应用于Java应用程序中,用于自动化定时任务的执行。它提供了灵活的任务调度机制,使得开发者可以方便地定义、安排和执行各种任务。在与Spring框架整合后,Quartz...
Quartz提供了`org.quartz.impl.jdbcjobstore.CreateTableUtils`工具类来帮助你完成这一操作。此外,确保所有服务器共享相同的数据库,这样每个scheduler都能看到并协调任务状态。 总之,SpringBoot结合Quartz可以...
3. **调度器配置**:`SchedulerFactoryBean`是Spring对Quartz调度器的包装,它管理所有的触发器和任务。在这里,我们将`cron`触发器添加到调度器中,使得任务与触发器关联起来。 接下来,我们看下服务类和服务的...
1. 定义作业类:这是执行实际任务的代码,可以是任何需要按计划执行的操作。 2. 创建触发器:根据需要定义触发器,如设置每天固定时间执行,或者按照一定间隔重复执行。 3. 配置调度器:初始化Quartz.NET调度器,并...
2.通过 QuartzSchedulerBuilder 工具类创建调度器。 任务调度信息存储 Quartz 提供了多种方式来存储任务调度信息,例如: 1.使用 JDBCJobStore 来存储任务调度信息。 2.使用 RamJobStore 来存储任务调度信息。 ...
总的来说,Quartz.jar是一个强大且灵活的任务调度工具,广泛应用于需要定期执行任务的Java应用程序中,如后台数据处理、报表生成、定时发送邮件等场景。正确理解和使用Quartz,能极大地提高你的工作效率并优化系统...
总的来说,Quartz是一个强大的任务调度工具,适用于各种需要定时执行任务的应用场景。通过使用Quartz,开发者可以将时间相关的复杂性从应用程序中分离出来,让系统更加灵活和可维护。在2.2.1这个版本中,可能会包含...
Spring框架和Quartz是两个广泛使用的工具,它们可以协同工作以实现复杂和灵活的任务调度。本篇文章将深入探讨如何使用Spring与Quartz结合来创建一个任务调度的小例子。 首先,Spring是一个开源的Java企业级应用开发...
总之,Quartz.NET为.NET开发者提供了一个强大的工具,帮助他们构建复杂且灵活的任务调度系统。通过熟练掌握其核心概念和使用方法,我们可以轻松地管理和控制应用程序中的周期性任务,提升系统效率和自动化水平。
通过以上信息,我们可以看到Quartz.Net3.0.X为.NET开发者提供了一套强大的工具来管理定时任务,它的灵活性、可靠性和易用性使其成为.NET平台上进行作业调度的理想选择。结合实际项目需求,开发者可以充分利用Quartz...
【Quartz定时任务】是Java领域的一个强大任务调度框架,但在C#中也有相应的实现,如标题所示,这里讨论的是C#控制台应用中使用Quartz.NET进行定时任务的实现。Quartz.NET允许开发者在应用程序中安排任务在特定时间...
这个版本支持Java 8的新特性,并对核心容器、数据访问/集成、Web、AOP、工具类和测试等多个模块进行了优化。 **三、集成步骤** 1. **添加依赖** 首先,在你的`pom.xml`或`build.gradle`文件中添加Quartz和Spring的...
Quartz是一款开源的作业调度框架,它为...总之,Quartz 2.1.7作为一款强大的定时调度工具,为Java开发者提供了完善的定时任务解决方案。通过熟练掌握其API和设计理念,可以轻松地在项目中实现复杂的时间驱动业务逻辑。
- **监控和管理**:Quartz提供了多种工具和API用于监控和管理任务调度,包括查看任务状态、暂停或恢复任务、删除任务等。 在实际应用中,Quartz集群能够很好地处理大规模、复杂的定时任务场景,减少了自定义实现的...
Quartz调度器可以在应用启动时加载这些配置,实现定时任务的自动化执行。 4. **插件部署** TaskManager.Plugins可能指的是Quartz的插件系统,它允许扩展Quartz的功能。Quartz提供了一些内置插件,如JobStore(用于...
Quartz框架支持创建简单或复杂的调度计划,能够高效地执行从少量到成千上万的任务。 #### 二、Quartz的核心概念 Quartz框架的核心概念主要包括四个部分:Scheduler(任务调度)、Job(任务)、Trigger(触发器)...