Quartz框架可以动态的添加、删除作业任务,也可以修改作业的时间。下边我们就通过例子更清楚的知道该如何使用。
实例:
package com.what21.quartz1.cron.demo2;
public class QuartzDemo {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception{
//==========添加任务=========
String expression = "0/2 * * * * ?";
QuartzManager.addJob("demoJob", expression, DemoJob.class);
System.out.println("***********已添加任务***********");
Thread.sleep(10 * 1000);
//==========修改任务=========
String expression2 = "0/5 * * * * ?";
QuartzManager.modifyJobExpression("demoJob", expression2);
System.out.println("***********已修改任务***********");
Thread.sleep(10 * 1000);
//==========删除任务=========
QuartzManager.removeJob("demoJob");
System.out.println("***********已删除任务***********");
Thread.sleep(10 * 1000);
//==========添加任务=========
String expression3 = "0/2 * * * * ?";
QuartzManager.addJob("demoJob", expression3, DemoJob.class);
System.out.println("***********已添加任务***********");
Thread.sleep(10 * 1000);
QuartzManager.shutdownJobs();
}
}
package com.what21.quartz1.cron.demo2;
import org.quartz.CronTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
public class QuartzManager {
private static SchedulerFactory schedulerFactory = new StdSchedulerFactory();
static final String jobGroupName = "jobGroup";
static final String triggerGroupName = "triggerGroup";
/**
* 添加任务
*
* @param name
* @param expression
* @param clazz
*/
public static void addJob(String name, String expression,
Class extends Job> clazz) {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
// 任务名,任务组,任务执行类
JobDetail jobDetail = new JobDetail(name, jobGroupName, clazz);
// 触发器名,触发器组
CronTrigger trigger = new CronTrigger(name, triggerGroupName);
// 触发器表达式
trigger.setCronExpression(expression);
scheduler.scheduleJob(jobDetail, trigger);
// 启动
if (!scheduler.isShutdown()) {
scheduler.start();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 移除任务
*
* @param name
*/
public static void removeJob(String name) {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
// 停止触发器
scheduler.pauseTrigger(name, triggerGroupName);
// 移除触发器
scheduler.unscheduleJob(name, triggerGroupName);
// 删除任务
scheduler.deleteJob(name, jobGroupName);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 修改任务
*
* @param name
* @param expression
*/
@SuppressWarnings("unchecked")
public static void modifyJobExpression(String name, String expression) {
try {
Scheduler scheduler = schedulerFactory.getScheduler();
JobDetail jobDetail = scheduler.getJobDetail(name, jobGroupName);
if(jobDetail != null){
removeJob(name);
addJob(name, expression,jobDetail.getJobClass());
}else{
throw new RuntimeException("Task" + name +"does not exist.");
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 停止
*/
public static void shutdownJobs() {
try {
Scheduler sched = schedulerFactory.getScheduler();
if (!sched.isShutdown()) {
sched.shutdown();
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
package com.what21.quartz1.cron.demo2;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class DemoJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println(">>>>>>>>>>>>>>><<<<<<<<<<<<<<
}
}
执行结果:
***********已添加任务***********
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
***********已修改任务***********
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
***********已删除任务***********
***********已添加任务***********
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<
>>>>>>>>>>>>>>><<<<<<<<<<<<<<<