Schedule用法实例
来源:互联网 发布:淘宝设置第二件半价 编辑:程序博客网 时间:2024/06/11 19:40
一、包
import org.quartz.CronTrigger;import org.quartz.DateBuilder;import org.quartz.JobBuilder;import org.quartz.JobDataMap;import org.quartz.JobDetail;import org.quartz.JobExecutionContext;import org.quartz.JobKey;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SimpleScheduleBuilder;import org.quartz.SimpleTrigger;import org.quartz.Trigger;import org.quartz.TriggerBuilder;import org.quartz.impl.matchers.GroupMatcher;
二、方法
2.1 获得JobBuilder对象实例
private JobBuilder newJob(Class clss){ return JobBuilder.newJob(clss);}
2.2 获得TriggerBuilder对象实例
private TriggerBuilder newTrigger(){ return TriggerBuilder.newTrigger();}
2.3 事件触发:日期转换为分钟
private Date evenMinuteDate(Date date){ return DateBuilder.evenMinuteDate(date);}
2.4 事件触发:日期转换为秒
private Date evenSecondDate(Date date){ return DateBuilder.evenSecondDate(date);}
2.5获得JobDetail实例对象
/** * 获得JobDetail实例对象 * @param faxx 方案编号和模型编号是必填项 * @param clss * @return */ private JobDetail newJobDetail(BdFaxxPo faxx,Class clss){ JobDetail job = newJob(clss).withIdentity("BdFaxxJob_"+faxx.getId(),"BdFaxxJobGroup_"+faxx.getMxId()).build(); JobDataMap jobDataMap = job.getJobDataMap(); jobDataMap.put("BdFaxxPo", faxx); return job; }
2.6 构建触发器
/** * 构建触发器 * @param faxx 方案编号和模型编号,比对频率,单位,是必填项 * @param clss * @return */ private Trigger newTrigger(BdFaxxPo faxx,Class clss){ float faxxCycle = 0; if("0".equals(faxx.getCycleUnit())){//分钟 faxxCycle = faxx.getBdCycle()*60;//分换算成秒 }else if("1".equals(faxx.getCycleUnit())){//小时 faxxCycle = faxx.getBdCycle()*60*60;//小时换算成秒 } int faxxCycleInt = (int)faxxCycle; String triggerDesc = "方案名称:"+faxx.getName()+"(模型:"+faxx.getMxName()+"),"+DataDicUtil.getBdModelOpts().get(faxx.getBdModel())+"-"+DataDicUtil.getBdWayOpts().get(faxx.getBdWay())+"比对,频率:每"+faxxCycleInt+"秒比对一次"; log.info("starting "+triggerDesc); TriggerBuilder triggerBuilder = newTrigger().withIdentity("BdFaxxTrigger"+faxx.getId(),"BdFaxxTriggerGroup_"+faxx.getMxId()); //triggerBuilder.startNow(); Calendar cal = Calendar.getInstance(); cal.setTime(new Date()); cal.add(Calendar.SECOND, faxxCycleInt+10); Date reminderStartTime=cal.getTime(); System.out.println(DateUtil.getDateByPatten(reminderStartTime, DateUtil.S_FULL_TIME_FORMAT)); triggerBuilder.startAt(reminderStartTime); //设置执行频率:方法1 //.withSchedule(CalendarIntervalScheduleBuilder.calendarIntervalSchedule().withIntervalInSeconds(faxxCycleInt)) //设置执行频率:方法2 SimpleScheduleBuilder simpleScheduleBuilder=SimpleScheduleBuilder.simpleSchedule(); simpleScheduleBuilder.withIntervalInSeconds(faxxCycleInt); simpleScheduleBuilder.repeatForever();//如果不设置总发送次数,将一直运行 //System.out.println("hashCode:"+simpleScheduleBuilder.hashCode()); triggerBuilder.withSchedule(simpleScheduleBuilder); triggerBuilder.withDescription(triggerDesc); Trigger trigger = triggerBuilder.build(); return trigger; }
2.7 启动调度
/** * 启动调度 * @param job JobDetail * @param trigger Trigger * @throws SchedulerException */ private void startBdFaxxJob(JobDetail job,Trigger trigger) throws SchedulerException{ scheduler.scheduleJob(job, trigger); }
2.8 组合JobDetail、Trigger并启动调度
/** * 组合JobDetail、Trigger并启动调度 * @param faxx * @param clss * @throws SchedulerException */public void startBdFaxxJob(BdFaxxPo faxx,Class clss) throws SchedulerException{ try { //1、构建JobDetail作业 JobDetail job = newJobDetail(faxx ,clss ); //2构建Trigger 触发器 Trigger trigger = newTrigger(faxx ,clss); //3、启动调度器 job 1:N Trigger` startBdFaxxJob(job,trigger); if(!scheduler.isStarted()){ scheduler.start(); } getPlanningJob(" last"); getExcetingJob(" last"); } catch (Exception e) { e.printStackTrace(); log.error(e); }}
2.9清理所有计划中的作业
/** * 清理所有计划中的作业 * @throws SchedulerException */public void cleanAllJob() throws SchedulerException{log.info("服务器启动,清理所有已存储的计划中的作业");GroupMatcher<JobKey> matcher = GroupMatcher.groupContains("BdFaxxJobGroup");Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);for (JobKey jobKey : jobKeys) {scheduler.deleteJob(jobKey);}}
2.10 如果方案被删除,对应的任务也应该删除
/** * 如果方案被删除,对应的任务也应该删除 * @param bdFaxxList * @throws SchedulerException */public void cleanUpJob(ScheduleJob scheduleJob) throws SchedulerException{System.out.println("-------------清理任务----------------");JobKey jobKey = new JobKey(scheduleJob.getJobName(),scheduleJob.getJobGroup());//删除任务后,所对应的trigger也将被删除scheduler.deleteJob(jobKey);//清理执行历史//参考接口//scheduler.pauseTrigger(triggerKey);//停止触发器//scheduler.unscheduleJob(triggerKey);//移除触发器}
2.11 暂停与恢复作业
/** * 暂停任务 * @throws SchedulerException */public void pauseJob(ScheduleJob scheduleJob) throws SchedulerException{JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());scheduler.pauseJob(jobKey);}/** * 恢复任务 * @throws SchedulerException */public void resumeJob(ScheduleJob scheduleJob) throws SchedulerException{JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());scheduler.resumeJob(jobKey);}
2.12 项目启动时初始化,启动所有定时任务
/** * 项目启动时初始化,启动所有定时任务 */public void startJobs(){try{if(!scheduler.isStarted()){System.out.println("scheduler 正在启动"+!scheduler.isStarted());scheduler.start();}else{System.out.println("scheduler 已经启动");}cleanAllJob();System.out.println("scheduler启动成功!");}catch(Exception e){e.printStackTrace();}}
2.13 关闭所有定时任务
/** * 关闭所有定时任务 */public void shutdownJobs(){try{if(!scheduler.isShutdown()){scheduler.shutdown(true);}}catch(Exception e){log.error(e.getMessage());log.error(e);}}
0 1
- Schedule用法实例
- cocos2d-x schedule用法
- timer.schedule定时器用法
- timer.schedule定时器用法
- Cocos2d-x schedule用法
- JAVA timer.schedule用法
- Cocos2d-JS schedule用法
- Cocos2d-JS schedule用法
- Timer中schedule()的用法
- Timer中schedule()的用法
- Timer中schedule()的用法
- Timer中schedule的用法
- Timer中schedule()的用法
- Timer中schedule()的用法
- Timer中schedule()的用法
- Timer中schedule()的用法
- Timer中schedule()的用法
- Timer中schedule()的用法
- swift UIImageView 子view接受点击
- Mac JAVA 环境变量和 Maven环境变量
- android shape的使用
- 数据库优化,开发高效的数据库系统
- hadoop安装之-hadoop
- Schedule用法实例
- swift UITextFiled边框设置
- 【移动安全】so动态调试对抗反编译及反调试
- 日期与时间的转换,计算两个日期间的天数,月数
- 大数据就业方向
- java基础学习笔记(6)
- SQOOP导入hive表报错
- 两个手机靠近,唤起应用如微信(需打开NFC)
- 游戏打击感