转自:http://www.blogchong.com/post/96.html
quartz定时任务调度框架,使用实例。
Job类://即实际调度任务实现
、
package net.csdn.edm.util.quartz;import java.util.HashMap;import java.util.Map;import net.csdn.common.logging.CSLogger;import net.csdn.common.logging.Loggers;import org.quartz.Job;import org.quartz.JobDataMap;import org.quartz.JobExecutionContext;import org.quartz.JobExecutionException;/** * @author:blogchong * @blog: http://www.blogchong.com/ * @Version:1.0 * @CreateTime:2014年12月30日 下午3:27:02 * @Description:定时进度job */public class QuartzJob implements Job { protected CSLogger logger = Loggers.getLogger(QuartzJob.class); @SuppressWarnings("static-access") public void execute(JobExecutionContext arg0) throws JobExecutionException { // 接收参数 JobDataMap jobDataMap = arg0.getJobDetail().getJobDataMap(); //通过这种方式,传递参数 String taskId = jobDataMap.getString("taskId"); //具体的定时任务实现,在这里实现即可 //具体实现略过 }} |
添加Job类:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
package net.csdn.edm.util.quartz;import net.csdn.common.logging.CSLogger;import net.csdn.common.logging.Loggers;import net.csdn.edm.util.MacroDef;import org.quartz.CronScheduleBuilder;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SchedulerFactory;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.impl.StdSchedulerFactory;/** * @author:blogchong * @blog: http://www.blogchong.com/ * @Version:1.0 * @CreateTime:2014年12月30日 下午3:28:32 * @Description:添加job接口 */public class QuartzAdd {public static SchedulerFactory schedFact = new StdSchedulerFactory();protected static CSLogger logger = Loggers.getLogger(QuartzAdd.class);public static Scheduler sched;public static void startSched() throws SchedulerException {try {QuartzAdd.sched = QuartzAdd.schedFact.getScheduler();QuartzAdd.sched.start();} catch (Exception e) {e.printStackTrace();}}public static boolean quartzAdd(String type, String taskId) throws Exception {try {// 若sched未赋值或者未启动,则先在全局中启动它if (QuartzAdd.sched == null || !QuartzAdd.sched.isStarted()) {QuartzAdd.startSched();}//定时规则,跟普通crontable的差不多String rule = "0 0/" + MacroDef.QUARTZ_INTERVAL + " * * * ?";//设置组名,和任务名String quartz_name = taskId;String quartz_group = type;// 创建jobDetail实例,指定job名以及所属组JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class).withIdentity(quartz_name, quartz_group).build();jobDetail.getJobDataMap().put("taskId", taskId);Trigger trigger = TriggerBuilder.newTrigger().withIdentity(quartz_name, quartz_group).withSchedule(CronScheduleBuilder.cronSchedule(rule)).startNow().build();QuartzAdd.sched.scheduleJob(jobDetail, trigger);logger.info("[已添加定时获取进度任务, taskID:" + taskId + ", type:" + type + "]");return true;} catch (Exception e) {logger.error("[添加定时任务出错,任务号:" + taskId + "]");logger.error(e.toString());return false;}}} |