前段时间有位朋友问了我Quartz的使用,于是尝试些了个简单的例子向解释Quartz的使用
Quartz的一些基本使用
package com.quartz;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import org.quartz.Job;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerContext;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
public class ActionJob implements Job {
public static void main(String[] args) {
try {
StdSchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
SchedulerContext context = scheduler.getContext();
context.put("args", "args[0]");
String expression = "00 26 15 ? * MON";
JobDetail detail = newJob(ActionJob.class)
.withIdentity("detail_name", "detail_group").build();
Trigger trigger = newTrigger()
.withIdentity("trigger_name", "trigger_group")
.withSchedule(cronSchedule(expression)).build();
scheduler.scheduleJob(detail, trigger);
scheduler.start();
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
Scheduler scheduler = context.getScheduler();
TriggerKey triggerKey = context.getTrigger().getKey();
try {
System.out.println("外部参数:" + scheduler.getContext().getString("args"));
// scheduler.pauseTrigger(triggerKey);执行任务前暂停这个任务,按需使用
String path = "com.quartz.Task";
//加载任务类
Class<?> clas = Class.forName(path);
Object o = clas.newInstance();//实例化已任务类对象
//获取启动方法,并启动
clas.getMethod("execute", Config.class).invoke(o, new Config());
} catch (Exception e) {
e.printStackTrace();
}
// finally {
// try {
// scheduler.resumeTrigger(triggerKey);
// } catch (SchedulerException e) {
// e.printStackTrace();
// }
// } //不管任务是否成功,始终都解除这个任务。按需使用
}
}
任务类
package com.quartz;
public class Task {
public void execute(Config config) {
//执行任务
System.out.println("just " + config.name);
}
}
任务所需配置类
package com.quartz;
public class Config {
public String name = "test";
}
测试输出
外部参数:args[0] just test
原文:http://my.oschina.net/u/1240328/blog/387534