admin管理员组文章数量:1794759
Schedule用法实例
一、包
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); } }版权声明:本文标题:Schedule用法实例 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686477260a71879.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论