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实现的。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。