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

简介:

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

Java代码   收藏代码
  1. package com.yida.framework.base.util.quartz;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.quartz.CronScheduleBuilder;  
  7. import org.quartz.CronTrigger;  
  8. import org.quartz.Job;  
  9. import org.quartz.JobBuilder;  
  10. import org.quartz.JobDetail;  
  11. import org.quartz.JobKey;  
  12. import org.quartz.Scheduler;  
  13. import org.quartz.SchedulerException;  
  14. import org.quartz.Trigger.TriggerState;  
  15. import org.quartz.TriggerBuilder;  
  16. import org.quartz.TriggerKey;  
  17. import org.quartz.impl.matchers.GroupMatcher;  
  18. import org.springframework.scheduling.quartz.SchedulerFactoryBean;  
  19.   
  20. import com.yida.framework.base.util.AppUtil;  
  21. import com.yida.framework.modules.po.Task;  
  22. import com.yida.framework.modules.po.TaskGroup;  
  23. import com.yida.framework.modules.po.TaskSchedule;  
  24.   
  25. /** 
  26.  * @ClassName: SchedulerUtils 
  27.  * @Description: Quartz任务计划调度工具类 
  28.  * @author Lanxiaowei(736031305@qq.com) 
  29.  * @date 2015年12月10日 下午4:47:12 
  30.  * 
  31.  */  
  32. public class SchedulerUtils {  
  33.     //Trigger各种状态:  
  34.     //None:Trigger已经完成,且不会在执行,或者找不到该触发器,或者Trigger已经被删除  
  35.     //NORMAL:正常状态   
  36.     //PAUSED:暂停状态   
  37.     //COMPLETE:触发器完成,但是任务可能还正在执行中   
  38.     //BLOCKED:线程阻塞状态   
  39.     //ERROR:出现错误  
  40.   
  41.       
  42.     /** 
  43.      * @throws ClassNotFoundException  
  44.      * @Author: Lanxiaowei(736031305@qq.com) 
  45.      * @Title: addTaskSchedule 
  46.      * @Description: 添加任务计划 
  47.      * @param @param taskSchedule 
  48.      * @param @return 
  49.      * @param @throws SchedulerException 
  50.      * @return int 
  51.      * @throws 
  52.      */  
  53.     public static int addTaskSchedule(TaskSchedule taskSchedule) throws SchedulerException, ClassNotFoundException {  
  54.         Task task = taskSchedule.getTask();  
  55.         if(null == task) {  
  56.             //任务计划尚未绑定任务  
  57.             return -1;  
  58.         }  
  59.         TaskGroup group = task.getGroup();  
  60.         String groupName = null;  
  61.         if(null != group) {  
  62.             groupName = group.getTaskGroupName();  
  63.         } else {  
  64.             groupName = BaseTask.DEFAULT_GROUP;  
  65.         }  
  66.         SchedulerFactoryBean schedulerFactory =   
  67.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  68.         Scheduler scheduler = schedulerFactory.getScheduler();  
  69.           
  70.         TriggerKey triggerKey = TriggerKey.triggerKey(taskSchedule.getScheduleName(),   
  71.             groupName);  
  72.         CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);  
  73.           
  74.         if (null == trigger) {  
  75.             //这里是任务类的class  
  76.             JobDetail jobDetail = JobBuilder.newJob((Class<? extends Job>) Class.forName(task.getTaskClass()))  
  77.                 .withIdentity(taskSchedule.getScheduleName(), groupName).build();  
  78.             String uniqueKey = taskSchedule.getScheduleName() + "#$#" + task.getTaskName()   
  79.                 + "#$#" + groupName;  
  80.             jobDetail.getJobDataMap().put(uniqueKey, taskSchedule);  
  81.             //表达式调度构建器  
  82.             CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(taskSchedule  
  83.                 .getCronExpression());  
  84.             trigger = TriggerBuilder.newTrigger().withIdentity(taskSchedule.getScheduleName(), groupName)  
  85.                 .withSchedule(scheduleBuilder).build();  
  86.             scheduler.scheduleJob(jobDetail, trigger);  
  87.         } else {  
  88.             CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(taskSchedule  
  89.                 .getCronExpression());  
  90.             trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)  
  91.                 .withSchedule(scheduleBuilder).build();  
  92.             scheduler.rescheduleJob(triggerKey, trigger);  
  93.         }  
  94.         return 1;  
  95.     }  
  96.       
  97.     /** 
  98.      * @Author: Lanxiaowei(736031305@qq.com) 
  99.      * @Title: pauseJob 
  100.      * @Description: 暂停任务计划 
  101.      * @param @param taskScheduleName     任务计划名称 
  102.      * @param @param taskGroupName        任务分组名称 
  103.      * @param @throws SchedulerException 
  104.      * @return void 
  105.      * @throws 
  106.      */  
  107.     public static void pauseJob(String taskScheduleName,String taskGroupName) throws SchedulerException {  
  108.         SchedulerFactoryBean schedulerFactory =   
  109.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  110.         Scheduler scheduler = schedulerFactory.getScheduler();  
  111.         JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);  
  112.         scheduler.pauseJob(jobKey);  
  113.     }  
  114.       
  115.     /** 
  116.      * @Author: Lanxiaowei(736031305@qq.com) 
  117.      * @Title: pauseJob 
  118.      * @Description: 批量暂停任务计划 
  119.      * @param @param groupMatcher 
  120.      * @param @throws SchedulerException 
  121.      * @return void 
  122.      * @throws 
  123.      */  
  124.     public static void pauseJob(GroupMatcher<JobKey> groupMatcher) throws SchedulerException {  
  125.         SchedulerFactoryBean schedulerFactory =   
  126.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  127.         Scheduler scheduler = schedulerFactory.getScheduler();  
  128.         //GroupMatcher创建示例,groupContains即任务分组名称中包含指定字符的任务计划全部暂停  
  129.         //GroupMatcher<JobKey> groupMatcher = GroupMatcher.groupContains("xxxx");  
  130.         scheduler.pauseJobs(groupMatcher);  
  131.     }  
  132.       
  133.     /** 
  134.      * @Author: Lanxiaowei(736031305@qq.com) 
  135.      * @Title: pauseAllJob 
  136.      * @Description: 暂停所有任务计划 
  137.      * @param @throws SchedulerException 
  138.      * @return void 
  139.      * @throws 
  140.      */  
  141.     public static void pauseAllJob() throws SchedulerException {  
  142.         SchedulerFactoryBean schedulerFactory =   
  143.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  144.         Scheduler scheduler = schedulerFactory.getScheduler();  
  145.         scheduler.pauseAll();  
  146.     }  
  147.       
  148.     /** 
  149.      * @Author: Lanxiaowei(736031305@qq.com) 
  150.      * @Title: resumeJob 
  151.      * @Description: 恢复任务计划 
  152.      * @param @param taskScheduleName     任务计划名称 
  153.      * @param @param taskGroupName        任务分组名称 
  154.      * @param @throws SchedulerException 
  155.      * @return void 
  156.      * @throws 
  157.      */  
  158.     public static void resumeJob(String taskScheduleName,String taskGroupName) throws SchedulerException {  
  159.         SchedulerFactoryBean schedulerFactory =   
  160.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  161.         Scheduler scheduler = schedulerFactory.getScheduler();  
  162.         JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);  
  163.         scheduler.resumeJob(jobKey);  
  164.     }  
  165.       
  166.     /** 
  167.      * @Author: Lanxiaowei(736031305@qq.com) 
  168.      * @Title: resumeAllJob 
  169.      * @Description: 恢复所有任务计划 
  170.      * @param @throws SchedulerException 
  171.      * @return void 
  172.      * @throws 
  173.      */  
  174.     public static void resumeAllJob() throws SchedulerException {  
  175.         SchedulerFactoryBean schedulerFactory =   
  176.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  177.         Scheduler scheduler = schedulerFactory.getScheduler();  
  178.         scheduler.resumeAll();  
  179.     }  
  180.       
  181.     /** 
  182.      * @Author: Lanxiaowei(736031305@qq.com) 
  183.      * @Title: deleteJob 
  184.      * @Description: 删除任务计划 
  185.      * @param @param taskScheduleName 
  186.      * @param @param taskGroupName 
  187.      * @param @throws SchedulerException 
  188.      * @return void 
  189.      * @throws 
  190.      */  
  191.     public static void deleteJob(String taskScheduleName,String taskGroupName) throws SchedulerException {  
  192.         SchedulerFactoryBean schedulerFactory =   
  193.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  194.         Scheduler scheduler = schedulerFactory.getScheduler();  
  195.         JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);  
  196.         scheduler.deleteJob(jobKey);  
  197.     }  
  198.       
  199.     /** 
  200.      * @Author: Lanxiaowei(736031305@qq.com) 
  201.      * @Title: deleteJob 
  202.      * @Description: 批量删除任务计划 
  203.      * @param @param taskScheduleList 
  204.      * @param @throws SchedulerException 
  205.      * @return void 
  206.      * @throws 
  207.      */  
  208.     public static void deleteJob(List<TaskSchedule> taskScheduleList) throws SchedulerException {  
  209.         if(null == taskScheduleList || taskScheduleList.size() <= 0) {  
  210.             return;  
  211.         }  
  212.         SchedulerFactoryBean schedulerFactory =   
  213.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  214.         Scheduler scheduler = schedulerFactory.getScheduler();  
  215.         List<JobKey> jobKeyList = new ArrayList<JobKey>();  
  216.         for(TaskSchedule taskSchedule : taskScheduleList) {  
  217.             Task task = taskSchedule.getTask();  
  218.             if(null == task) {  
  219.                 continue;  
  220.             }  
  221.             String taskGroupName = null;  
  222.             TaskGroup group = task.getGroup();  
  223.             if(null != group) {  
  224.                 taskGroupName = group.getTaskGroupName();  
  225.             } else {  
  226.                 taskGroupName = BaseTask.DEFAULT_GROUP;  
  227.             }  
  228.             String taskScheduleName = taskSchedule.getScheduleName();  
  229.             JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);  
  230.             jobKeyList.add(jobKey);  
  231.         }  
  232.         scheduler.deleteJobs(jobKeyList);  
  233.     }  
  234.       
  235.     /** 
  236.      * @Author: Lanxiaowei(736031305@qq.com) 
  237.      * @Title: cancleJob 
  238.      * @Description: 取消任务计划 
  239.      * @param @param taskScheduleName 
  240.      * @param @param taskGroupName 
  241.      * @param @throws SchedulerException 
  242.      * @return void 
  243.      * @throws 
  244.      */  
  245.     public static void cancleJob(String taskScheduleName,String taskGroupName) throws SchedulerException {  
  246.         SchedulerFactoryBean schedulerFactory =   
  247.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  248.         Scheduler scheduler = schedulerFactory.getScheduler();  
  249.         TriggerKey triggerKey = TriggerKey.triggerKey(taskScheduleName,taskGroupName);  
  250.         scheduler.unscheduleJob(triggerKey);  
  251.     }  
  252.       
  253.     /** 
  254.      * @Author: Lanxiaowei(736031305@qq.com) 
  255.      * @Title: canleJob 
  256.      * @Description: 批量取消任务计划 
  257.      * @param @param taskScheduleList 
  258.      * @param @throws SchedulerException 
  259.      * @return void 
  260.      * @throws 
  261.      */  
  262.     public static void canleJob(List<TaskSchedule> taskScheduleList) throws SchedulerException {  
  263.         if(null == taskScheduleList || taskScheduleList.size() <= 0) {  
  264.             return;  
  265.         }  
  266.         SchedulerFactoryBean schedulerFactory =   
  267.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  268.         Scheduler scheduler = schedulerFactory.getScheduler();  
  269.         List<TriggerKey> triggerKeyList = new ArrayList<TriggerKey>();  
  270.         for(TaskSchedule taskSchedule : taskScheduleList) {  
  271.             Task task = taskSchedule.getTask();  
  272.             if(null == task) {  
  273.                 continue;  
  274.             }  
  275.             String taskGroupName = null;  
  276.             TaskGroup group = task.getGroup();  
  277.             if(null != group) {  
  278.                 taskGroupName = group.getTaskGroupName();  
  279.             } else {  
  280.                 taskGroupName = BaseTask.DEFAULT_GROUP;  
  281.             }  
  282.             String taskScheduleName = taskSchedule.getScheduleName();  
  283.             TriggerKey triggerKey = TriggerKey.triggerKey(taskScheduleName,taskGroupName);  
  284.             triggerKeyList.add(triggerKey);  
  285.         }  
  286.         scheduler.unscheduleJobs(triggerKeyList);  
  287.     }  
  288.       
  289.     /** 
  290.      * @Author: Lanxiaowei(736031305@qq.com) 
  291.      * @Title: checkJobExist 
  292.      * @Description: 检测任务计划是否存在 
  293.      * @param @param taskScheduleName 
  294.      * @param @param taskGroupName 
  295.      * @param @return 
  296.      * @param @throws SchedulerException 
  297.      * @return boolean 
  298.      * @throws 
  299.      */  
  300.     public static boolean checkJobExist(String taskScheduleName,String taskGroupName) throws SchedulerException {  
  301.         SchedulerFactoryBean schedulerFactory =   
  302.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  303.         Scheduler scheduler = schedulerFactory.getScheduler();  
  304.         JobKey jobKey = JobKey.jobKey(taskScheduleName, taskGroupName);  
  305.         return scheduler.checkExists(jobKey);  
  306.     }  
  307.       
  308.     /** 
  309.      * @throws SchedulerException  
  310.      * @Author: Lanxiaowei(736031305@qq.com) 
  311.      * @Title: returnJobState 
  312.      * @Description: 返回任务计划的运行状态  
  313.      *               BLOCKED:5 
  314.      *               ERROR:4 
  315.      *               COMPLETE:3 
  316.      *               PAUSED:2 
  317.      *               NORMAL:1 
  318.      *               NONE:0 
  319.      * @param @param taskScheduleName 
  320.      * @param @param taskGroupName 
  321.      * @param @return 
  322.      * @return int 
  323.      * @throws 
  324.      */  
  325.     public static int returnJobState(String taskScheduleName,String taskGroupName) throws SchedulerException {  
  326.         SchedulerFactoryBean schedulerFactory =   
  327.                 (SchedulerFactoryBean)AppUtil.getBean("schedulerFactory");  
  328.         Scheduler scheduler = schedulerFactory.getScheduler();  
  329.         TriggerKey triggerKey = TriggerKey.triggerKey(taskScheduleName,taskGroupName);  
  330.         return scheduler.getTriggerState(triggerKey).ordinal();  
  331.     }  
  332. }  

 转载:http://iamyida.iteye.com/blog/2263216

目录
相关文章
|
8月前
|
Java 调度 Spring
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
SpringBoot实现多线程定时任务动态定时任务配置文件配置定时任务
719 0
|
NoSQL Java 调度
定时任务基本使用指南(cron 时间表达式、Spring 自带调度器、JDK 原生定时器)
定时任务基本使用指南(cron 时间表达式、Spring 自带调度器、JDK 原生定时器)
678 0
|
Java 调度
Springboot 使用Quartz定时器执行多个定时任务 配置篇
Springboot 使用Quartz定时器执行多个定时任务 配置篇
829 0
Springboot 使用Quartz定时器执行多个定时任务 配置篇
|
Java 调度 Maven
定时任务组件Quartz
定时任务组件Quartz
定时任务组件Quartz
|
存储 Java 调度
这种方式整合Quartz你见过吗?
`Quartz`是一款优秀的任务调度框架,支持内存、JDBC的形式来存储未执行的任务列表,支持多个任务节点同时执行任务,支持任务漂移到不同的节点执行。
Quartz3定时任务学习之异步调度器
Quartz3定时任务学习之异步调度器 Quartz3与Quartz2的主要区别有两点: 1,Quartz3将它的资源类库拆的更细了,比如,想使用Quartz3开发,最少要引用Quartz,Quartz.Jobs,Quartz.Plugins这三个类库。 2,Quartz3整体上使用的是异步创建实例,所以我们使用时就必须要async,await的语法。 下面我们用Quartz3来做一个任务调度。
Quartz3定时任务学习之异步调度器
Quartz 定时任务管理类
Quartz 定时任务管理类
171 0
quartz获取定时任务下次执行的时间
quartz很多人都会用,但需要配置cronExpression. 这个cronExpression很多技术人员都要配置,但很多情况,我们要知道这个cronExpression下次执行的时间是啥,让非技术人员很直观的看到下一个定时任务的执行时间。
3191 0
|
关系型数据库 Java 数据库连接
spring框架使用Quartz执行定时任务实例详解
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/80382324 Quartz简介   1.Quartz,是一个完全由java编写的开源作业调度框架。
1204 0