java 动态增加定时任务示例
整理文档,java动态增加定时任务示例,直接上代码。
importorg.apache.tools.ant.util.DateUtils; importorg.quartz.CronTrigger; importorg.quartz.JobDetail; importorg.quartz.Scheduler; importorg.quartz.SchedulerFactory; importorg.quartz.impl.StdSchedulerFactory; importjava.util.Calendar; importjava.util.Date; /** *@Description:定时任务管理类 *Createdbyzhangxbon2017/2/10. */ publicclassQuartzManager{ privatestaticSchedulerFactorygSchedulerFactory=newStdSchedulerFactory(); privatestaticStringJOB_GROUP_NAME="EXTJWEB_JOBGROUP_NAME"; privatestaticStringTRIGGER_GROUP_NAME="EXTJWEB_TRIGGERGROUP_NAME"; /** *@Description:添加一个定时任务,使用默认的任务组名,触发器名,触发器组名 * *@paramjobName *任务名 *@paramcls *任务 *@paramtime *时间设置,参考quartz说明文档 * *@Title:QuartzManager.java */ @SuppressWarnings("unchecked") publicstaticvoidaddJob(StringjobName,Classcls,Stringtime,Objectparams){ try{ Schedulersched=gSchedulerFactory.getScheduler(); JobDetailjobDetail=newJobDetail(jobName,JOB_GROUP_NAME,cls);//任务名,任务组,任务执行类 jobDetail.getJobDataMap().put("params",params); //触发器 CronTriggertrigger=newCronTrigger(jobName,TRIGGER_GROUP_NAME);//触发器名,触发器组 trigger.setCronExpression(time);//触发器时间设定 sched.scheduleJob(jobDetail,trigger); //启动 if(!sched.isShutdown()){ sched.start(); } }catch(Exceptione){ thrownewRuntimeException(e); } } /** *@Description:添加一个定时任务 * *@paramjobName *任务名 *@paramjobGroupName *任务组名 *@paramtriggerName *触发器名 *@paramtriggerGroupName *触发器组名 *@paramjobClass *任务 *@paramtime *时间设置,参考quartz说明文档 * */ @SuppressWarnings("unchecked") publicstaticvoidaddJob(StringjobName,StringjobGroupName, StringtriggerName,StringtriggerGroupName,ClassjobClass, Stringtime,Objectparams){ try{ Schedulersched=gSchedulerFactory.getScheduler(); JobDetailjobDetail=newJobDetail(jobName,jobGroupName,jobClass);//任务名,任务组,任务执行类 jobDetail.getJobDataMap().put("params",params); //触发器 CronTriggertrigger=newCronTrigger(triggerName,triggerGroupName);//触发器名,触发器组 trigger.setCronExpression(time);//触发器时间设定 sched.scheduleJob(jobDetail,trigger); }catch(Exceptione){ thrownewRuntimeException(e); } } /** *@Description:修改一个任务的触发时间(使用默认的任务组名,触发器名,触发器组名) * *@paramjobName *@paramtime * */ @SuppressWarnings("unchecked") publicstaticvoidmodifyJobTime(StringjobName,Stringtime){ try{ Schedulersched=gSchedulerFactory.getScheduler(); CronTriggertrigger=(CronTrigger)sched.getTrigger(jobName,TRIGGER_GROUP_NAME); if(trigger==null){ return; } StringoldTime=trigger.getCronExpression(); if(!oldTime.equalsIgnoreCase(time)){ JobDetailjobDetail=sched.getJobDetail(jobName,JOB_GROUP_NAME); ClassobjJobClass=jobDetail.getJobClass(); removeJob(jobName); addJob(jobName,objJobClass,time,jobDetail.getJobDataMap()); } }catch(Exceptione){ thrownewRuntimeException(e); } } /** *@Description:修改一个任务的触发时间 * */ publicstaticvoidmodifyJobTime(StringtriggerName, StringtriggerGroupName,Stringtime){ try{ Schedulersched=gSchedulerFactory.getScheduler(); CronTriggertrigger=(CronTrigger)sched.getTrigger(triggerName,triggerGroupName); if(trigger==null){ return; } StringoldTime=trigger.getCronExpression(); if(!oldTime.equalsIgnoreCase(time)){ CronTriggerct=(CronTrigger)trigger; //修改时间 ct.setCronExpression(time); //重启触发器 sched.resumeTrigger(triggerName,triggerGroupName); } }catch(Exceptione){ thrownewRuntimeException(e); } } /** *@Description:移除一个任务(使用默认的任务组名,触发器名,触发器组名) * *@paramjobName * */ publicstaticvoidremoveJob(StringjobName){ try{ Schedulersched=gSchedulerFactory.getScheduler(); sched.pauseTrigger(jobName,TRIGGER_GROUP_NAME);//停止触发器 sched.unscheduleJob(jobName,TRIGGER_GROUP_NAME);//移除触发器 sched.deleteJob(jobName,JOB_GROUP_NAME);//删除任务 }catch(Exceptione){ thrownewRuntimeException(e); } } /** *@Description:移除一个任务 * */ publicstaticvoidremoveJob(StringjobName,StringjobGroupName, StringtriggerName,StringtriggerGroupName){ try{ Schedulersched=gSchedulerFactory.getScheduler(); sched.pauseTrigger(triggerName,triggerGroupName);//停止触发器 sched.unscheduleJob(triggerName,triggerGroupName);//移除触发器 sched.deleteJob(jobName,jobGroupName);//删除任务 }catch(Exceptione){ thrownewRuntimeException(e); } } /** *@Description:启动所有定时任务 */ publicstaticvoidstartJobs(){ try{ Schedulersched=gSchedulerFactory.getScheduler(); sched.start(); }catch(Exceptione){ thrownewRuntimeException(e); } } /** *@Description:关闭所有定时任务 * */ publicstaticvoidshutdownJobs(){ try{ Schedulersched=gSchedulerFactory.getScheduler(); if(!sched.isShutdown()){ sched.shutdown(); } }catch(Exceptione){ thrownewRuntimeException(e); } } publicstaticStringformatTime(Datedate){ //0/1****? Stringtime=DateUtils.format(date,"smhd*?"); System.out.println(time); returntime; } }
测试类
importorg.quartz.Job; importorg.quartz.JobExecutionContext; importorg.quartz.JobExecutionException; importjava.text.SimpleDateFormat; importjava.util.Calendar; importjava.util.Date; /** *@Description:任务执行类 *Createdbyzhangxbon2017/2/10. */ publicclassQuartzJobimplementsJob{ @Override publicvoidexecute(JobExecutionContextcontext)throwsJobExecutionException{ Objectparams=context.getJobDetail().getJobDataMap().get("params"); System.out.println(params); System.out.println(newSimpleDateFormat("yyyy-MM-ddHH:mm:ss").format(newDate())+"★★★★★★★★★★★"); System.out.println("【移除定时】开始..."); QuartzManager.removeJob((String)params); System.out.println("【移除定时】成功"); } publicstaticvoidmain(String[]args){ try{ Stringjob_name="动态任务调度"; System.out.println("【系统启动】开始(每1秒输出一次)..."); Calendarcal=Calendar.getInstance(); cal.add(Calendar.SECOND,10); QuartzManager.addJob(job_name,QuartzJob.class,QuartzManager.formatTime(cal.getTime()),job_name); Thread.sleep(11); cal.setTime(newDate()); cal.add(Calendar.SECOND,10); QuartzManager.addJob(job_name+1,QuartzJob.class,QuartzManager.formatTime(cal.getTime()),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,QuartzJob.class,"*/10****?"); //Thread.sleep(60000); //System.out.println("【移除定时】开始..."); //QuartzManager.removeJob(job_name); //System.out.println("【移除定时】成功"); }catch(Exceptione){ e.printStackTrace(); } } }
不过最后发现,还是没法做动态延迟。后面用延时mq实现的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。