LaunchJob.java
2.88 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package com.sitech.jmx.manage;
import java.util.Date;
import java.util.HashMap;
import com.sitech.util.Formater;
import org.apache.log4j.Logger;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.StatefulJob;
import com.sitech.schedule.SchedulerService;
import com.sitech.schedule.bean.Job;
import com.sitech.util.JSONUtil;
/**
* Description: quartz作业类
*
* 2012-02-10 linxc 给所有的作业统一增加了一个参数:采集周期 COLL_INTERVALS(主要用于SHELL采集)
* 每个采集指标都加一个采集周期,用于自监控
*
* 2012-12-17 linxc 任务调度方式修改:quartz只负责发送消息通知,不直接调用采集任务
*/
public class LaunchJob implements StatefulJob {
public static final String SCHEDULE_ID = "SCHEDULE_ID";
public static final String OBJECTNAME = "OBJECTNAME";
public static final String OPERATIONNAME = "OPERATIONNAME";
public static final String EXEOBJECT = "EXEOBJECT";
public static final String PARAMS = "PARAMS";
private static Logger logger = Logger.getLogger("SCHEDULE");
@SuppressWarnings("unchecked")
public void execute(JobExecutionContext context)
throws JobExecutionException {
String guid = "";
String objectname = "";
String cOperation = "";
HashMap<String, String> params = null;
// 计算采集周期
Date nextFireTime = context.getNextFireTime();
long interval = nextFireTime.getTime() - new Date().getTime();
try {
JobDataMap data = context.getJobDetail().getJobDataMap();
guid = data.getString(SCHEDULE_ID);
objectname = data.getString(OBJECTNAME);
cOperation = data.getString(OPERATIONNAME);
params = (HashMap<String, String>) data.get(PARAMS);
params.put("COLL_INTERVAL", Long.toString(interval));
params.put("SCHEDULE_ID", guid);
params.put("NEXT_FIRE_TIME", Formater.datetimeToString(nextFireTime,"yyyy-MM-dd HH:mm:ss"));
logger.info("-- Begin coll job, objectName[" + objectname
+ "], methodName[" + cOperation + "], collInterval["
+ interval + "],params=" + JSONUtil.toJSON(params));
Job job = new Job();
job.setId(guid);
job.setInterval(interval);
job.setObjectName(objectname);
job.setOperation(cOperation);
job.setParams(params);
SchedulerService.getInstance().addJob(job);
} catch (Exception e) {
logger.error("Exception while executing job, objectName["
+ objectname + "], methodName[" + cOperation + "],params="
+ JSONUtil.toJSON(params), e);
JobExecutionException e2 = new JobExecutionException(e);
// this job will refire immediately
e2.refireImmediately();
throw e2;
} finally {
logger.info(" --End coll job, objectName[" + objectname
+ "], methodName[" + cOperation + "].\n --next fire at["
+ nextFireTime + "],params=" + JSONUtil.toJSON(params));
Runtime.getRuntime().freeMemory();
Runtime.getRuntime().gc();
}
}
}