Quartz定时器实例

jopen 10年前

配置web

<!--启动任务监听器-->  <listener>   <listener-class>com.suntek.web.pay.listener.ContextListener</listener-class>  </listener>

监听类

public class ContextListener implements ServletContextListener {     public void contextDestroyed(ServletContextEvent context) {    // TODO Auto-generated method stub    // 停止所有任务    String[] jobNameSet = null;    try {     jobNameSet = JobScheduler.scheduler.getJobNames(Scheduler.DEFAULT_GROUP);    } catch (SchedulerException e1) {     // TODO Auto-generated catch block     CommonLogger.logger.error(e1.getMessage(), e1);    }        for(String jobName : jobNameSet)    {     try {      JobScheduler.scheduler.deleteJob(jobName, Scheduler.DEFAULT_GROUP);     } catch (SchedulerException e) {      // TODO Auto-generated catch block      CommonLogger.logger.error(e.getMessage(), e);     }    }        try {     if( !JobScheduler.scheduler.isShutdown() )      JobScheduler.scheduler.shutdown();    } catch (SchedulerException e) {     // TODO Auto-generated catch block     CommonLogger.logger.error(e.getMessage(), e);    }       }     public void contextInitialized(ServletContextEvent context) {    // TODO Auto-generated method stub       JobScheduler.addStockWarningJob(StockWarningJob.StockWarningJobName, StockWarningJob.StockWarningJobTrigger);   }    }

JobScheduler

public class JobScheduler {     public static Scheduler scheduler;      static {    try {     scheduler = new StdSchedulerFactory().getScheduler();    } catch (SchedulerException e) {     // TODO Auto-generated catch block         }   }   private static final String TRIGGER_GROUP_NAME = Constants.APP_NAME + "_trigger_group";   /**     * @param jobName    * @param triggerName    * @author cwqi    */   public static void addStockWarningJob(String jobName, String triggerName) {    try {     // 判断job是否存在     if( isJobExist(jobName) ){      scheduler.deleteJob(jobName, Scheduler.DEFAULT_GROUP);     }     CronTrigger trigger = new CronTrigger(triggerName, TRIGGER_GROUP_NAME);          String cronExpression=Configure.getProperty("SEND_SMS_EXEC_INTERVAL");     //每个月周一到周五的9点到17点,每隔30分钟执行一次     //cronExpression ="0 0/1 9-17 ? * 2-6";     cronExpression=StringUtils.isBlank(cronExpression)?"0 0/30 9-17 ? * 2-6":cronExpression+" ? * 2-6";     trigger.setCronExpression( cronExpression);          //Date nextFireTime = trigger.getNextFireTime();     Date nextFireTime = trigger.computeFirstFireTime(new BaseCalendar());     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");     String nextFireTimeStr = sdf.format(nextFireTime);          CommonLogger.logger.debug("[JobScheduler.addStockWarningJob]JobName"+jobName+"next execute time:"+nextFireTimeStr);     JobDetail jobDetail = new JobDetail(jobName, Scheduler.DEFAULT_GROUP, StockWarningJob.class);          JobDataMap dataMap = jobDetail.getJobDataMap();     dataMap.put("TASK_STOCKWARNINGJOB_NAME", jobName);          scheduler.scheduleJob(jobDetail, trigger);     if(scheduler.isShutdown()){      scheduler.start();     }              } catch (Exception e) {     // TODO Auto-generated catch block     CommonLogger.logger.error("[JobScheduler.addStockWarningJob]fail:"+jobName);     CommonLogger.logger.error("添加定时任务异常", e);    }   }         private static boolean isJobExist(String jobName) {    boolean isExist = false;    try {     String[] jobNames = scheduler.getJobNames(jobName);     if( jobNames == null )      return false;          if( Arrays.asList(jobNames).contains(jobName) )      return true;    } catch (SchedulerException e) {     // TODO Auto-generated catch block     CommonLogger.logger.error(e.getMessage(), e);    }    return isExist;   }     }

Job

public class StockWarningJob implements Job {      // 备份任务触发器名称、任务名称   public static final String StockWarningJobTrigger = Constants.APP_NAME + "_StockWarningJobTrigger";   public static final String StockWarningJobName = Constants.APP_NAME + "_StockWarningJobName";   protected Logger logger = CommonLogger.logger;   String stockValveString=Configure.getProperty("QBSTOCK_NOTENOUGH_WARNING");   int stockValve=StringUtils.isBlank(stockValveString)?10:Integer.parseInt(stockValveString);      public void execute(JobExecutionContext context) throws JobExecutionException {    // TODO Auto-generated method stub    JobDetail jobDetail = context.getJobDetail();    JobDataMap dataMap = jobDetail.getJobDataMap();      String taskName = dataMap.getString("TASK_STOCKWARNINGJOB_NAME");     logger.debug("[StockWarningJob.execute]start:"+taskName);     }  }

此外还有一种定时器是使用timerTask。