zoukankan      html  css  js  c++  java
  • 【最佳实践】好用的Quartz管理器类

    转发的代码,原理就不提了

    下面直接上代码: 
    QuartzManager.java 动态添加、修改和删除定时任务管理类

      1 import org.quartz.CronScheduleBuilder;
      2 import org.quartz.CronTrigger;
      3 import org.quartz.Job;
      4 import org.quartz.JobBuilder;
      5 import org.quartz.JobDetail;
      6 import org.quartz.JobKey;
      7 import org.quartz.Scheduler;
      8 import org.quartz.SchedulerFactory;
      9 import org.quartz.Trigger;
     10 import org.quartz.TriggerBuilder;
     11 import org.quartz.TriggerKey;
     12 import org.quartz.impl.StdSchedulerFactory;
     13 
     14 public class QuartzManager {
     15 
     16     private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();  
     17 
     18     /** 
     19      * @Description: 添加一个定时任务 
     20      *  
     21      * @param jobName 任务名 
     22      * @param jobGroupName  任务组名 
     23      * @param triggerName 触发器名 
     24      * @param triggerGroupName 触发器组名 
     25      * @param jobClass  任务 
     26      * @param cron   时间设置,参考quartz说明文档  
     27      */  
     28     @SuppressWarnings({ "unchecked", "rawtypes" })  
     29     public static void addJob(String jobName, String jobGroupName, 
     30             String triggerName, String triggerGroupName, Class jobClass, String cron) {  
     31         try {  
     32             Scheduler sched = schedulerFactory.getScheduler();  
     33             // 任务名,任务组,任务执行类
     34             JobDetail jobDetail= JobBuilder.newJob(jobClass).withIdentity(jobName, jobGroupName).build();
     35 
     36             // 触发器  
     37             TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
     38             // 触发器名,触发器组  
     39             triggerBuilder.withIdentity(triggerName, triggerGroupName);
     40             triggerBuilder.startNow();
     41             // 触发器时间设定  
     42             triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
     43             // 创建Trigger对象
     44             CronTrigger trigger = (CronTrigger) triggerBuilder.build();
     45 
     46             // 调度容器设置JobDetail和Trigger
     47             sched.scheduleJob(jobDetail, trigger);  
     48 
     49             // 启动  
     50             if (!sched.isShutdown()) {  
     51                 sched.start();  
     52             }  
     53         } catch (Exception e) {  
     54             throw new RuntimeException(e);  
     55         }  
     56     }  
     57 
     58     /** 
     59      * @Description: 修改一个任务的触发时间
     60      *  
     61      * @param jobName 
     62      * @param jobGroupName
     63      * @param triggerName 触发器名
     64      * @param triggerGroupName 触发器组名 
     65      * @param cron   时间设置,参考quartz说明文档   
     66      */  
     67     public static void modifyJobTime(String jobName, 
     68             String jobGroupName, String triggerName, String triggerGroupName, String cron) {  
     69         try {  
     70             Scheduler sched = schedulerFactory.getScheduler();  
     71             TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
     72             CronTrigger trigger = (CronTrigger) sched.getTrigger(triggerKey);  
     73             if (trigger == null) {  
     74                 return;  
     75             }  
     76 
     77             String oldTime = trigger.getCronExpression();  
     78             if (!oldTime.equalsIgnoreCase(cron)) { 
     79                 /** 方式一 :调用 rescheduleJob 开始 */
     80                 // 触发器  
     81                 TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
     82                 // 触发器名,触发器组  
     83                 triggerBuilder.withIdentity(triggerName, triggerGroupName);
     84                 triggerBuilder.startNow();
     85                 // 触发器时间设定  
     86                 triggerBuilder.withSchedule(CronScheduleBuilder.cronSchedule(cron));
     87                 // 创建Trigger对象
     88                 trigger = (CronTrigger) triggerBuilder.build();
     89                 // 方式一 :修改一个任务的触发时间
     90                 sched.rescheduleJob(triggerKey, trigger);
     91                 /** 方式一 :调用 rescheduleJob 结束 */
     92 
     93                 /** 方式二:先删除,然后在创建一个新的Job  */
     94                 //JobDetail jobDetail = sched.getJobDetail(JobKey.jobKey(jobName, jobGroupName));  
     95                 //Class<? extends Job> jobClass = jobDetail.getJobClass();  
     96                 //removeJob(jobName, jobGroupName, triggerName, triggerGroupName);  
     97                 //addJob(jobName, jobGroupName, triggerName, triggerGroupName, jobClass, cron); 
     98                 /** 方式二 :先删除,然后在创建一个新的Job */
     99             }  
    100         } catch (Exception e) {  
    101             throw new RuntimeException(e);  
    102         }  
    103     }  
    104 
    105     /** 
    106      * @Description: 移除一个任务 
    107      *  
    108      * @param jobName 
    109      * @param jobGroupName 
    110      * @param triggerName 
    111      * @param triggerGroupName 
    112      */  
    113     public static void removeJob(String jobName, String jobGroupName,  
    114             String triggerName, String triggerGroupName) {  
    115         try {  
    116             Scheduler sched = schedulerFactory.getScheduler();  
    117 
    118             TriggerKey triggerKey = TriggerKey.triggerKey(triggerName, triggerGroupName);
    119 
    120             sched.pauseTrigger(triggerKey);// 停止触发器  
    121             sched.unscheduleJob(triggerKey);// 移除触发器  
    122             sched.deleteJob(JobKey.jobKey(jobName, jobGroupName));// 删除任务  
    123         } catch (Exception e) {  
    124             throw new RuntimeException(e);  
    125         }  
    126     }  
    127 
    128     /** 
    129      * @Description:启动所有定时任务 
    130      */  
    131     public static void startJobs() {  
    132         try {  
    133             Scheduler sched = schedulerFactory.getScheduler();  
    134             sched.start();  
    135         } catch (Exception e) {  
    136             throw new RuntimeException(e);  
    137         }  
    138     }  
    139 
    140     /** 
    141      * @Description:关闭所有定时任务 
    142      */  
    143     public static void shutdownJobs() {  
    144         try {  
    145             Scheduler sched = schedulerFactory.getScheduler();  
    146             if (!sched.isShutdown()) {  
    147                 sched.shutdown();  
    148             }  
    149         } catch (Exception e) {  
    150             throw new RuntimeException(e);  
    151         }  
    152     }  
    153 }
  • 相关阅读:
    Yii框架(一)
    phpStorm中使用xdebug断点调试php代码
    在mysql存储过程中拼接sql解决in的字段类型不匹配问题
    openjdk源码阅读导航
    深入理解tomcat9---源码构建
    API权限控制与安全管理
    java虚拟机性能监控调优及原则
    java十年技术栈[总结复习用]
    spring boot配置文件application.propertis
    php危险的函数和类 disable_functions/class
  • 原文地址:https://www.cnblogs.com/iCanhua/p/8530731.html
Copyright © 2011-2022 走看看