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
原创粉丝点击