package com.cn.demo2; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.StringReader; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.apache.commons.lang.StringUtils; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; import org.quartz.CronTrigger; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.Scheduler; import org.quartz.impl.StdSchedulerFactory; import org.xml.sax.InputSource; /** * 定时任务调度器 * */ public class SchedulerUtil { /**任务调度器*/ private static Scheduler scheduler; /**任务名与任务组的映射*/ private static HashMap<String,String> rels; /**全部启动*/ public static void startAll()throws Exception{ initScheduler(true); scheduler.start(); } /** * Get the scheduler value */ public static Scheduler getScheduler() { return scheduler; } /** * 被触发调度 * * */ public static boolean startByTrigger(String taskName, Map params) throws Exception{ boolean boo = true; if(scheduler==null){ initScheduler(true); scheduler.start(); } String groupName= rels.get(taskName); if(StringUtils.isNotEmpty(groupName)){ JobDetail detail = scheduler.getJobDetail(taskName,groupName); JobDataMap map = detail.getJobDataMap(); map.put("params", params); scheduler.triggerJob(taskName,groupName,map); //要把参数带入,必须在此处传第3个参数 //map.remove("params"); //没必要删,参数不会影响原来的定时计划,只会作用于本次触发 System.out.println("任务:"+taskName+" 被触发调度成功!"); }else{ boo=false; System.out.println("任务:"+taskName+"不存在或未激活, 不可被触发调度!"); } return boo; } /**初始化调度器*/ private static void initScheduler(boolean isPrintLog) throws Exception{ String path=System.getProperty("user.dir")+File.separator +"conf" + File.separator+"quartzConfig.properties"; scheduler = new StdSchedulerFactory(path).getScheduler(); System.out.println("使用quartzConfig.properties初始化queartz!!!"); rels = new HashMap<String, String>(); //定时任务集合 List<TaskBeen> tasks = getTaskBean(); int i = 1; for(TaskBeen task : tasks){ List<String> taskClass = task.getTaskClass(); String triggerTime = task.getTriggerTime(); for(String taskName : taskClass){ createJob(i, taskName, triggerTime, isPrintLog); } i++; } //触发启动时需要立即跑一次的任务 for(TaskBeen task : tasks){ Set<String> runOnStartTask = task.getRunOnStartTask(); for(String taskName : runOnStartTask){ Map params = new HashMap(); params.put("runOnStart", "1"); startByTrigger(taskName, params); } } } /**创建1个任务*/ private static void createJob(int i, String taskName, String triggerTime, boolean isPrintLog){ try { String groupName = "group" + i; taskName = taskName.trim(); JobDetail jobDetail = new JobDetail(taskName, groupName, Class.forName(taskName)); CronTrigger cronTrgger = new CronTrigger(taskName, groupName, triggerTime); scheduler.scheduleJob(jobDetail, cronTrgger); rels.put(taskName, groupName); if(isPrintLog){System.out.println("启动任务:"+taskName+", 执行时机:"+triggerTime);} } catch (Exception e) { System.out.println("任务启动失败:"+taskName+":"+triggerTime); System.out.println(e); } } /**得到task-bean*/ public static List<TaskBeen> getTaskBean() throws Exception{ List<TaskBeen> beans = new ArrayList<TaskBeen>(); String path = System.getProperty("user.dir")+File.separator+"conf" + File.separator+"taskConfig.xml"; Document doc = getDocByPath(path); Element rootElem = doc.getRootElement(); List<Element> tasks = rootElem.getChildren("task"); for(Element task : tasks){ String triggerTime = task.getChildText("triggerTime"); List<Element> taskBeens = task.getChild("taskBeen").getChildren("value"); List<String> beenList = new ArrayList<String>(); Set<String> runOnStartSet = new HashSet<String>(); for(Element taskBeenName : taskBeens){ String activate = taskBeenName.getAttributeValue("isActivate"); //如果没有激活,则不加入到集合中 if(!"1".equals(activate)){ continue; } String beenName = taskBeenName.getText().toString(); beenList.add(beenName); String runOnStart = taskBeenName.getAttributeValue("runOnStart"); if("1".equals(runOnStart)){ runOnStartSet.add(beenName); } } TaskBeen taskBeen = new TaskBeen(); taskBeen.setTaskClass(beenList); taskBeen.setTriggerTime(triggerTime); taskBeen.setRunOnStartTask(runOnStartSet); beans.add(taskBeen); } return beans; } public static Document getDocByPath(String filePath) throws Exception{ File file = new File(filePath); InputStream in = new FileInputStream(file); StringBuffer readStr = new StringBuffer(); byte buf[] = new byte[1024]; int readLen = 0; while ((readLen = in.read(buf, 0, 1024)) != -1) { readStr.append(new String(buf, 0, readLen, "utf-8")); } if (in != null){ in.close(); } String xmlStr = readStr.toString(); StringReader read = new StringReader(xmlStr); InputSource source = new InputSource(read); SAXBuilder sb = new SAXBuilder(); Document doc = null; doc = sb.build(source); return doc; } }
最近下载更多
简陋小屋123 LV1
2021年7月1日
mc870624 LV2
2021年4月27日
jibamao LV2
2021年3月12日
胡万岁 LV2
2021年1月31日
513513 LV1
2020年3月10日
honghu123 LV2
2020年3月2日
memgkun LV1
2020年2月27日
忆往昔丶时间淡化过去 LV12
2020年2月21日
jzlsunny LV2
2020年2月11日
asdasdq123574 LV1
2020年1月6日
最近浏览更多
1358849392 LV21
2022年11月23日
maojianyun LV30
2022年8月9日
cz8857216 LV4
2022年5月9日
双鱼座程序员7号 LV6
2022年4月23日
denliv_hui LV13
2021年10月20日
国服后端 LV10
2021年7月9日
简陋小屋123 LV1
2021年7月1日
长安不测字 LV2
2021年5月18日
mc870624 LV2
2021年4月27日
cbd451304045
2021年4月6日
暂无贡献等级