java 动态增加定时任务示例

java 动态增加定时任务示例,第1张

概述整理文档,java动态增加定时任务示例,直接上代码。importorg.apache.tools.ant.util.DateUtils;

整理文档,java 动态增加定时任务示例,直接上代码。

import org.apache.tools.ant.util.DateUtils;import org.quartz.crontrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.impl.StdSchedulerFactory;import java.util.Calendar;import java.util.Date;/** * @Description: 定时任务管理类 * Created by zhangxb on 2017/2/10. */public class QuartzManager {  private static SchedulerFactory gSchedulerFactory = new StdSchedulerFactory();  private static String JOB_GROUP_name = "EXTJWEB_JOBGROUP_name";  private static String TRIGGER_GROUP_name = "EXTJWEB_TRIGGERGROUP_name";  /**   * @Description: 添加一个定时任务,使用默认的任务组名,触发器名,触发器组名   *   * @param jobname   *      任务名   * @param cls   *      任务   * @param time   *      时间设置,参考quartz说明文档   *   * @Title: QuartzManager.java   */  @SuppressWarnings("unchecked")  public static voID addJob(String jobname,Class cls,String time,Object params) {    try {      Scheduler sched = gSchedulerFactory.getScheduler();      JobDetail jobDetail = new JobDetail(jobname,JOB_GROUP_name,cls);// 任务名,任务组,任务执行类      jobDetail.getJobDataMap().put("params",params);      // 触发器      crontrigger trigger = new crontrigger(jobname,TRIGGER_GROUP_name);// 触发器名,触发器组      trigger.setCronExpression(time);// 触发器时间设定      sched.scheduleJob(jobDetail,trigger);      // 启动      if (!sched.isShutdown()) {        sched.start();      }    } catch (Exception e) {      throw new RuntimeException(e);    }  }  /**   * @Description: 添加一个定时任务   *   * @param jobname   *      任务名   * @param jobGroupname   *      任务组名   * @param triggername   *      触发器名   * @param triggerGroupname   *      触发器组名   * @param jobClass   *      任务   * @param time   *      时间设置,参考quartz说明文档   *   */  @SuppressWarnings("unchecked")  public static voID addJob(String jobname,String jobGroupname,String triggername,String triggerGroupname,Class jobClass,jobGroupname,jobClass);// 任务名,任务组,任务执行类      jobDetail.getJobDataMap().put("params",params);      // 触发器      crontrigger trigger = new crontrigger(triggername,triggerGroupname);// 触发器名,trigger);    } catch (Exception e) {      throw new RuntimeException(e);    }  }  /**   * @Description: 修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名)   *   * @param jobname   * @param time   *   */  @SuppressWarnings("unchecked")  public static voID modifyJobTime(String jobname,String time) {    try {      Scheduler sched = gSchedulerFactory.getScheduler();      crontrigger trigger = (crontrigger) sched.getTrigger(jobname,TRIGGER_GROUP_name);      if (trigger == null) {        return;      }      String oldTime = trigger.getCronExpression();      if (!oldTime.equalsIgnoreCase(time)) {        JobDetail jobDetail = sched.getJobDetail(jobname,JOB_GROUP_name);        Class objJobClass = jobDetail.getJobClass();        removeJob(jobname);        addJob(jobname,objJobClass,time,jobDetail.getJobDataMap());      }    } catch (Exception e) {      throw new RuntimeException(e);    }  }  /**   * @Description: 修改一个任务的触发时间   *   */  public static voID modifyJobTime(String triggername,String time) {    try {      Scheduler sched = gSchedulerFactory.getScheduler();      crontrigger trigger = (crontrigger) sched.getTrigger(triggername,triggerGroupname);      if (trigger == null) {        return;      }      String oldTime = trigger.getCronExpression();      if (!oldTime.equalsIgnoreCase(time)) {        crontrigger ct = (crontrigger) trigger;        // 修改时间        ct.setCronExpression(time);        // 重启触发器        sched.resumeTrigger(triggername,triggerGroupname);      }    } catch (Exception e) {      throw new RuntimeException(e);    }  }  /**   * @Description: 移除一个任务(使用默认的任务组名,触发器名,触发器组名)   *   * @param jobname   *   */  public static voID removeJob(String jobname) {    try {      Scheduler sched = gSchedulerFactory.getScheduler();      sched.pauseTrigger(jobname,TRIGGER_GROUP_name);// 停止触发器      sched.unscheduleJob(jobname,TRIGGER_GROUP_name);// 移除触发器      sched.deleteJob(jobname,JOB_GROUP_name);// 删除任务    } catch (Exception e) {      throw new RuntimeException(e);    }  }  /**   * @Description: 移除一个任务   *   */  public static voID removeJob(String jobname,String triggerGroupname) {    try {      Scheduler sched = gSchedulerFactory.getScheduler();      sched.pauseTrigger(triggername,triggerGroupname);// 停止触发器      sched.unscheduleJob(triggername,triggerGroupname);// 移除触发器      sched.deleteJob(jobname,jobGroupname);// 删除任务    } catch (Exception e) {      throw new RuntimeException(e);    }  }  /**   * @Description:启动所有定时任务   */  public static voID startJobs() {    try {      Scheduler sched = gSchedulerFactory.getScheduler();      sched.start();    } catch (Exception e) {      throw new RuntimeException(e);    }  }  /**   * @Description:关闭所有定时任务   *   */  public static voID shutdownJobs() {    try {      Scheduler sched = gSchedulerFactory.getScheduler();      if (!sched.isShutdown()) {        sched.shutdown();      }    } catch (Exception e) {      throw new RuntimeException(e);    }  }  public static String formatTime(Date date){    //0/1 * * * * ?    String time = DateUtils.format( date,"s m h d * ?");    System.out.println(time);    return time;  }}

测试类

import org.quartz.Job;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;/** * @Description: 任务执行类 * Created by zhangxb on 2017/2/10. */public class QuartzJob implements Job {  @OverrIDe  public voID execute(JobExecutionContext context) throws JobExecutionException {    Object params =  context.getJobDetail().getJobDataMap().get("params");    System.out.println(params);    System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+ "★★★★★★★★★★★");    System.out.println("【移除定时】开始...");    QuartzManager.removeJob((String)params);    System.out.println("【移除定时】成功");  }  public static voID main(String[] args) {    try {      String job_name = "动态任务调度";      System.out.println("【系统启动】开始(每1秒输出一次)...");      Calendar cal = Calendar.getInstance();      cal.add( Calendar.SECOND,10);      QuartzManager.addJob(job_name,QuartzJob.class,QuartzManager.formatTime(cal.getTime()),job_name);      Thread.sleep(11);      cal.setTime( new Date());      cal.add( Calendar.SECOND,10);      QuartzManager.addJob(job_name+1,job_name+1);      Thread.sleep(11);//      System.out.println("【修改时间】开始(每2秒输出一次)...");//      QuartzManager.modifyJobTime(job_name,"10/2 * * * * ?");//      Thread.sleep(6000);//      System.out.println("【移除定时】开始...");//      QuartzManager.removeJob(job_name);//      System.out.println("【移除定时】成功");////      System.out.println("【再次添加定时任务】开始(每10秒输出一次)...");//      QuartzManager.addJob(job_name,"*/10 * * * * ?");//      Thread.sleep(60000);//      System.out.println("【移除定时】开始...");//      QuartzManager.removeJob(job_name);//      System.out.println("【移除定时】成功");    } catch (Exception e) {      e.printstacktrace();    }  }}

不过最后发现,还是没法做动态延迟。后面用延时mq实现的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的java 动态增加定时任务示例全部内容,希望文章能够帮你解决java 动态增加定时任务示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1146826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存