Qutarz动态多任务定时功能实现
来源:互联网 发布:网络女作家收入排行榜 编辑:程序博客网 时间:2024/06/13 17:19
废话不多说直接上源码
有不懂的或错误的地方可以下方留言
import com.jctl.cloud.common.utils.SpringContextHolder;import com.jctl.cloud.manager.console.NodeConsole;import com.jctl.cloud.manager.node.entity.Node;import com.jctl.cloud.manager.node.service.NodeService;import com.jctl.cloud.manager.timingstrategy.entity.NodeCollectionCycle;import com.jctl.cloud.manager.timingstrategy.service.NodeCollectionCycleService;import org.quartz.CronTrigger;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerFactory;import org.quartz.impl.StdSchedulerFactory;import java.util.Iterator;import java.util.List;/** * @author gent * @used 多任务动态定时 * @date 2017年2月27日 */public class QutarzUtil { private static NodeService nodeService = SpringContextHolder.getBean(NodeService.class); private static NodeCollectionCycleService nodeCollectionCycleService = SpringContextHolder.getBean(NodeCollectionCycleService.class); private static SchedulerFactory schedulerFactory = new StdSchedulerFactory(); public static List<NodeCollectionCycle> getNclList(){ NodeCollectionCycle nodeCollectionCycle = new NodeCollectionCycle(); List<NodeCollectionCycle> list = nodeCollectionCycleService.findList(nodeCollectionCycle); return list; } /** * 初始化定时器 * * @throws Exception */ public static void initJobTrigger() throws Exception { List<NodeCollectionCycle> list = getNclList(); //开始搞事情 Scheduler scheduler = schedulerFactory.getScheduler(); JobDetail jobDetail = null; CronTrigger cronTrigger = null; Iterator ite = list.iterator(); while (ite.hasNext()) { //任务对象 NodeCollectionCycle nodeCollectionCycle = (NodeCollectionCycle) ite.next(); Node node = nodeService.getByNodeNum(nodeCollectionCycle.getNodeId()); //定时表达式 String cronExpression = nodeCollectionCycle.getCycleTime(); if (node.getDelFlag().equals("1")){ /** * 循环策略 */ //循环任务标识为"0" jobDetail = new JobDetail(node.getId() + "0", Scheduler.DEFAULT_GROUP, NodeConsole.class); cronTrigger = new CronTrigger(node.getId() + "0", Scheduler.DEFAULT_GROUP); //为触发器设置定时表达式 cronTrigger.setCronExpression(cronExpression); //启动新增定时器任务 scheduler.scheduleJob(jobDetail, cronTrigger); /** * 开关策略 * * 关闭:2 开启:1 */ if (node.getOpenFlag()!="" && node.getOpenFlag() != null) { if (node.getOpenFlag().equals("0")) { cronExpression = nodeCollectionCycle.getCycleOn(); jobDetail = new JobDetail(node.getId() + "1", Scheduler.DEFAULT_GROUP, NodeConsole.class); cronTrigger = new CronTrigger(node.getId() + "1", Scheduler.DEFAULT_GROUP); //为触发器设置定时表达式 cronTrigger.setCronExpression(cronExpression); //启动新增定时器任务 scheduler.scheduleJob(jobDetail, cronTrigger); } else if (node.getOpenFlag().equals("1")) { cronExpression = nodeCollectionCycle.getCycleOff(); jobDetail = new JobDetail(node.getId() + "2", Scheduler.DEFAULT_GROUP, NodeConsole.class); cronTrigger = new CronTrigger(node.getId() + "2", Scheduler.DEFAULT_GROUP); //为触发器设置定时表达式 cronTrigger.setCronExpression(cronExpression); //启动新增定时器任务 scheduler.scheduleJob(jobDetail, cronTrigger); } } } } //初始化任务只需要执行一次,执行一次后移除初始化触发器 scheduler.unscheduleJob("InitTrigger", Scheduler.DEFAULT_GROUP); } public static void start() { try { Scheduler scheduler = schedulerFactory.getScheduler(); if (scheduler.isStarted()) { List<Node> nodeList = nodeService.findList(new Node()); Iterator ite = nodeList.iterator(); while (ite.hasNext()){ Node node = (Node)ite.next(); scheduler.deleteJob(node.getId()+"0",scheduler.DEFAULT_GROUP); scheduler.deleteJob(node.getId()+"1",scheduler.DEFAULT_GROUP); scheduler.deleteJob(node.getId()+"2",scheduler.DEFAULT_GROUP); } scheduler.standby(); } initJobTrigger(); scheduler.start(); } catch (Exception e) { e.printStackTrace(); } } public static void shutdown(){ try{ Scheduler scheduler = schedulerFactory.getScheduler(); if (scheduler.isStarted()){ scheduler.shutdown(); } }catch (Exception e){ e.printStackTrace(); } } /** * 将时间字符串转换成qutarz可识别的通配符字符串 * * @param time 时间 * @param weeks 周*,此处为可变参数可传入多个值 * @return qutarz统配符字符串 */ public static String dateConvertQutarzFormate(String time, String[] weeks) { if (!time.equals(null) || !time.equals("")) { String[] t = time.split(":"); String hour = t[0] + " "; String min = t[1] + " "; if (min.toCharArray()[0] == 0) { min = min.toCharArray()[1]+""; } StringBuffer sb = new StringBuffer(); sb.append("* "); sb.append(min); sb.append(hour); sb.append("* "); if (!weeks.equals(null) || !weeks.equals("")) for (int i = 0; i <= weeks.length - 1; i++) { sb.append(weeks[i]); if (i == weeks.length - 1) { sb.append(" "); } else { sb.append(","); } } else { sb.append("*"); } sb.append("?"); return sb.toString(); } return null; } /** * 将普通日期格式转换成qutarz通配符 * @param time * @return */ public static String dateConvertQutarzFormate(String time) { if (!time.equals(null) || !time.equals("")) { String[] t = time.split(":"); String hour = t[0] + " "; String min = t[1] + " "; StringBuffer sb = new StringBuffer(); sb.append("* "); sb.append(min); sb.append(hour); sb.append("* "); sb.append("* "); sb.append("?"); return sb.toString(); } return null; } /** * 将qutarz通配符字符串转换成通用日期格式 例如 :0 50 17 * * 1,2,3 ? * * @param qutarzStr 要转换的qutarz通配符字符串 * @return 通用日期字符串 周一,周二,周三/17:50 */ public static String qutarzStrConvertDate(String qutarzStr) { String[] strings = qutarzStr.split(" "); StringBuffer date = new StringBuffer(); String weeks = strings[5]; String[] week = weeks.split(","); for (int i = 0; i < week.length; i++) { date.append("周"); date.append(week[i]); if (i != week.length - 1) { date.append(","); } else { break; } } date.append("/"); date.append(strings[2] + ":"); date.append(strings[1]); return date.toString(); } /** * 将qutarz通配符字符串转换成time时间 xx:xx:xx * @param qutarzStr * @return */ public static String qutarzStrConvertTime(String qutarzStr) { StringBuffer sb = new StringBuffer(); String[] strs = qutarzStr.split(" "); sb.append(strs[2]); sb.append(":"); sb.append(strs[1]); sb.append(":"); sb.append("00"); return sb.toString(); }}
0 0
- Qutarz动态多任务定时功能实现
- spring集成qutarz配置定时任务
- Quartz实现动态定时任务
- quartz实现动态定时任务
- Quartz实现动态定时任务
- Quartz实现动态定时任务
- java实现job功能,定时开启任务
- 单线程实现定时执行任务功能
- C++编码实现定时任务执行功能
- Spring+Quartz实现动态添加定时任务
- Spring+Quartz实现动态添加定时任务
- Spring整合Quartz实现动态定时任务
- quartz spring 实现动态定时任务
- quartz spring 实现动态定时任务
- Spring 整合 Quartz 实现动态定时任务
- quartz spring 实现动态定时任务
- quartz spring 实现动态定时任务
- quartz spring 实现动态定时任务
- SpringMVC解析Excel并存入到MySQL数据库
- 快速幂
- 反射机制编写数据库插入操作
- ubuntu下安装codeblocks
- ES6
- Qutarz动态多任务定时功能实现
- swift3.0 浮点数四舍五入为整数
- ubuntu配置静态IP和DNS
- HDU1561 The more, The Better
- JAVA接口和抽象类
- java的8种排序
- Power of Four问题及解法
- MFC学习总结 (67个技巧)
- Android 开发中我常用的手机App(持续更新)