转自: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
;
}
}
}
|