服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

web app用quartz实现java schedule job


  关于quartz
  
  1 下载quartz java包copy到web-inf/lib下
  
  2 建立 scheduler初始化servlet
  
  在web.xml里加入
  <servlet>
  <servlet-name>initializer</servlet-name>
  <servlet-class>
  com.nova.colimas.web.action.startupservlet
  </servlet-class>
  <load-on-startup>1</load-on-startup>
  </servlet>
  
  初始化servlet代码如下:
  
  public class startupservlet extends httpservlet {
  public void init(servletconfig cfg) throws
  javax.servlet.servletexception {
  initscheduler(cfg);
  return;
  }
  protected void initscheduler(servletconfig cfg){
  logger.info("quartz init servlet loaded, initializing scheduler...");
  // start now
  try{
  // create an default instance of the scheduler
  scheduler scheduler = stdschedulerfactory.getdefaultscheduler();
  //将scheduler存入serlvet上下文。
  cfg.getservletcontext().setattribute(constants.scheduler_key,scheduler);
  }catch(exception e){
  logger.error("quartz init servlet failed");
  }
  }}
  
  3 程序配置一个schedule job
  
  /**
  * @author tyrone
  *
  * todo to change the template for this generated type comment go to
  * window - preferences - java - code style - code templates */public class batcheditaction extends action implements privilegedaction {
  private static logger logger = null;
  private scheduler scheduler=null;
  public actionforward execute(actionmapping mapping,
  actionform form,
  httpservletrequest request,
  httpservletresponse response)
  throws exception{
  actionmessages errors=new actionmessages();
  logger = logger.getlogger(this.getclass());
  //获得servlet上下文
  servletcontext ctx =
  request.getsession().getservletcontext();
  //获得scheduler对象
  scheduler=(scheduler)ctx.getattribute(constants.scheduler_key);
  //根据form属性建立job
  createjob(form);
  try{
  logger.info("scheduler starting up...");
  //启动scheduler。
  scheduler.start();
  }catch(exception e){
  logger.error("scheduler get error");
  }
  return mapping.findforward("success");
  }
  /**
  * create a job based on form info.
  * @param form
  * @return
  */  protected void createjob(actionform form) throws exception{
  batchinfoform batchinfo=(batchinfoform)form;
  string classname=batchinfo.getfile();
  simpletrigger strigger=null;
  jobdetail jobdetail=null;
  calendar cal=null;
  //如果是一天一次的job
  if (batchinfo.getfrequency().equalsignorecase("oncedaily")){
  logger.info("batch run oncedaily");
  cal = new annualcalendar();
  //add calendar to the scheduler
  /*
  * setup a trigger to start firing now, with a null end date/time,
  * repeat forever and have (hour*60+ minute)*60000 ms between each firing.
  */
  //开始时间:11:45
  string[] time=batchinfo.getdailystarttime().split(":");
  java.util.calendar rightnow = java.util.calendar.getinstance();
  rightnow.set(java.util.calendar.hour_of_day,new integer(time[0]).intvalue());
  rightnow.set(java.util.calendar.minute,new integer(time[1]).intvalue());
  //间隔24小时
  long repeatinterval=24*60*60000;
  strigger = new simpletrigger("trigger",
  scheduler.default_group, rightnow.gettime(), null,
  simpletrigger.repeat_indefinitely, repeatinterval);
  }
  }
  // trigger 关联一个calendar, batchinfo.getname()唯一表示一个calendar
  strigger.setcalendarname(batchinfo.getname());
  scheduler.addcalendar(batchinfo.getname(), cal, true, true);
  try{
  //job类名为com.nova.colimas.job.test
  jobdetail = new jobdetail(classname,
  scheduler.default_group, class.forname(classname));
  //job关联一个trigger,加入scheduler
  scheduler.schedulejob(jobdetail, strigger);
  }catch(classnotfoundexception ex){
  logger.error(ex);
  throw new exception();
  }
  return ;
  }}
  
  4 job代码,job必须继承org.quartz.job
  
  package com.nova.colimas.job;import org.apache.log4j.logger;
  import org.quartz.job;
  import org.quartz.jobexecutioncontext;
  import org.quartz.jobexecutionexception;
  public class test implements job {
  private static logger logger = null;
  public void execute(jobexecutioncontext arg0) throws jobexecutionexception {
  // 定时运行。
  logger = logger.getlogger(this.getclass());
  logger.info("test job is running");
  }}
  
  5 运行结果
  
  [framework] 2005-08-23 11:45:29,440 - com.nova.colimas.job.test -215700 [defaultquartzscheduler_worker-0] info com.nova.colimas.job.test - test job is running

扫描关注微信公众号