核心第一步
创建线程池对象
核心第二步
创建Callable对象,重写call方法。
核心第三步
创建Future 对象
核心第四步
方法调用,设置超时时间
----------------------------------------------------- 完整实例代码如下 ------------------------------------------------------
/**
* 实现父类的抽象方法,执行定时命令
* @param context 请求内容
*/
public void executeJob(JobExecutionContext context)throws JobExecutionException {
String outJobClass = "";
ExecutorService exec = null;
try {
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
final String configId = StringUtil.toString(dataMap.get("configId"));
final Map jobMap = (Map) dataMap.get("jobMap");
final List jobList = (List) dataMap.get("jobList");
final String jobClass = StringUtil.toString(jobMap.get("S_JOB_CLASS"));
outJobClass = jobClass;
//通过反射机制,给任务执行类 发送执行命令
String pre = "com.cattsoft.xplus.task.quartz.agent.impl.";
final BusinessAgent agent = (BusinessAgent)Class.forName(pre +
jobClass).newInstance();
//核心第一步,创建线程池对象
exec = Executors.newFixedThreadPool(1);
//核心第二步,创建Callable对象
Callable<String> call = new Callable<String>() {
@Override
public String call() throws Exception {
//开始执行耗时操作
agent.execute(configId, jobMap, jobList);
return null;
}
};
//核心第三步,创建Future对象
Future<String> future = exec.submit(call);
//核心第四步,方法调用,设置超时时间
future.get(60*10, TimeUnit.SECONDS); //任务处理超时时间设为 10分钟
} catch (TimeoutException ex) {
LOG.info("处理超时啦...."+outJobClass);
ex.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
LOG.info("发送定时任务到Agent端失败!!!"+outJobClass);
}catch(Throwable e) {
e.printStackTrace();
LOG.info("发送定时任务到Agent出系统异常!!!"+outJobClass);
} finally {
// 关闭线程池
if(exec != null) {
exec.shutdownNow();
}
}
}