quartz scheduler job

This is the text that describe how to use quartz to create a schedule job in java application

 

 

1. web.xml add SchedularLauncher listener

<listener>
        <listener-class>com.hp.proctool.common.servlet.SchedularLauncher</listener-class>

</listener>

 

2. create jobinfo.xml

<jobs>

<!-- "0 15 23 ? * *" means every day trigger at 23:15:00. -->
<!-- generate OMS synchronous data job -->
  <job jobName="CiSyncJob" groupName="ReportJob" cronExp="0 15 22 ? * *"
       jobClassName="com.hp.proctool.common.job.CiSyncJob" >
  </job>

</jobs>

 

3. Add the SchedularLauncher to the application.

public class SchedularLauncher implements ServletContextListener {
private Logger logger = Logger.getLogger(SchedularLauncher.class);

public void contextDestroyed(ServletContextEvent event) {
  // do nothing
}

public void contextInitialized(ServletContextEvent event) {
  ServletContext sc = event.getServletContext();
  InputStream is = sc.getResourceAsStream("/WEB-INF/jobinfo.xml");
  com.hp.proctool.common.job.SimpleScheduler scheduler =
   new com.hp.proctool.common.job.SimpleScheduler(is);
  try {
   scheduler.startScheduler();

  } catch (Exception e) {
   logger.error("error when call the job schedular:", e);
  }
}

}

 

4. add the SimpleScheduler to the application

public class SimpleScheduler {
 private InputStream is;
 /** The configuration File */

 private Logger logger = Logger.getLogger(this.getClass());

 /** Quartz Scheduler Factory */
 private SchedulerFactory sf = new StdSchedulerFactory();

 /**
  * Default Constructor, use Default XML conf file
  */

 public SimpleScheduler(InputStream is) {
  this.is = is;
 }

 /**
  * Constructor that will use configuration file as the job input
  *
  * @param confFile
  */

 /**
  * Start the Simple Scheduler.
  *
  * @throws SimpleSchedulerException
  */
 public void startScheduler() throws Exception {
  try {
   logger.debug("Start Job Scheduler...");
   Scheduler sched = sf.getScheduler();
   /*
    * Remove the previously job store. Although this may not required,
    * as we use RAMJobStore.
    */
   String[] groups = sched.getTriggerGroupNames();
   for (int i = 0; i < groups.length; i++) {
    String[] names = sched.getTriggerNames(groups[i]);
    for (int j = 0; j < names.length; j++)
     sched.unscheduleJob(names[j], groups[i]);
   }
   groups = sched.getJobGroupNames();
   for (int i = 0; i < groups.length; i++) {
    String[] names = sched.getJobNames(groups[i]);
    for (int j = 0; j < names.length; j++)
     sched.deleteJob(names[j], groups[i]);
   }
   logger.debug("Already clear all old jobs");
   // Read the job information from configration files.
   logger.debug("Get Conf from XML file");
   Digester digester = setupDigester();
   Vector jobInfo = (Vector) digester.parse(this.is);
   logger.debug("Already read job info from config file");

   // Set Job to the scheduler.
   Iterator jobIt = jobInfo.iterator();
   int i = 0;
   while (jobIt.hasNext()) {
    JobInfo jinfo = (JobInfo) jobIt.next();
    Class jobClass = Class.forName(jinfo.getJobClassName());
    System.out.println("the job info is:" + jinfo.getJobName()
      + " " + jinfo.getGroupName() + " "
      + jinfo.getJobClassName());
    JobDetail jobDetail = new JobDetail(jinfo.getJobName(),
      jinfo.getGroupName(), jobClass);
    Vector params = jinfo.getJobParams();
    if (params.size() > 0) {
     Iterator paramIt = params.iterator();
     JobDataMap paramMap = new JobDataMap();
     while (paramIt.hasNext()) {
      JobParam param = (JobParam) paramIt.next();
      paramMap.put(param.getName(), param.getValue());
     }
     jobDetail.setJobDataMap(paramMap);
    }
    CronTrigger cTrigger = new CronTrigger("Trigger" + i,
      "defaultGroup", jinfo.getCronExp());
    sched.scheduleJob(jobDetail, cTrigger);
    i++;
   }// while
   sched.start();
  } catch (Exception ex) {

   throw ex;
  }
  System.out.println("[debug]already run the jobs.....");

 }

 /**
  *
  * Return current cron expression of the job
  *
  * @param jobName
  *            Name of Job
  * @param groupName
  *            Group of Job
  * @return Cron Expression of given job.
  * @throws SimpleSchedulerException
  */
 public String findCronExpOfJob(String jobName, String groupName)
   throws Exception {
  try {
   Scheduler sched = sf.getScheduler();
   Trigger[] triggers = sched.getTriggersOfJob(jobName, groupName);
   if (triggers == null || triggers.length <= 0) {
    logger.debug("Specified Job with Name: " + jobName
      + " and group Name: " + groupName + " does not exist!");

    throw new Exception();
   } else {
    if (triggers[0] instanceof CronTrigger) {
     CronTrigger cTrigger = (CronTrigger) triggers[0];
     return cTrigger.getCronExpression();
    } else {
     return null;
    }
   }
  } catch (SchedulerException ex) {

   throw ex;
  }
 }

 /**
  * Get the current Group name in scheduler.
  *
  * @return Group names
  * @throws SimpleSchedulerException
  */
 public String[] getGroupNames() throws Exception {
  try {
   Scheduler sched = sf.getScheduler();
   return sched.getJobGroupNames();
  } catch (SchedulerException ex) {

   throw ex;
  }
 }

 /**
  * Get current job names in the given group
  *
  * @param groupName
  *            Name of Group
  * @return Job Names in the specific Group.
  *
  * @throws SimpleSchedulerException
  */
 public String[] getJobNames(String groupName) throws Exception {
  try {
   Scheduler sched = sf.getScheduler();
   return sched.getJobNames(groupName);
  } catch (SchedulerException ex) {

   throw ex;
  }
 }

 /**
  * Shut down the scheduler.
  */
 public void shutdownScheudler() {
  try {
   Scheduler sched = sf.getScheduler();
   sched.shutdown(true);
  } catch (SchedulerException e) {
   logger.debug(e, e);
  }
 }

 /**
  * This method will Set up the Digester..
  *
  * @return Digest Object that have been
  */
 private Digester setupDigester() {
  Digester digester = new Digester();
  digester.addObjectCreate("jobs", Vector.class);
  digester.addObjectCreate("jobs/job", JobInfo.class);
  digester.addSetNext("jobs/job", "add");
  digester.addSetProperties("jobs/job", "jobName", "jobName");
  digester.addSetProperties("jobs/job", "groupName", "groupName");
  digester.addSetProperties("jobs/job", "cronExp", "cronExp");
  digester.addSetProperties("jobs/job", "jobClassName", "jobClassName");
  digester.addObjectCreate("jobs/job/jobParam", JobParam.class);
  digester.addSetNext("jobs/job/jobParam", "addParam");
  digester.addSetProperties("jobs/job/jobParam", "name", "name");
  digester.addSetProperties("jobs/job/jobParam", "value", "value");
  return digester;
 }
}

5. add JobInfo calss

public class JobInfo {
 /** identifier fieldsss */
 private Long id;

 /** persistent field */
 private String jobName;

 /** persistent field */
 private String groupName;

 /** persistent field */
 private String jobClassName;

 /** persistent field */
 private String cronExp;

 /** persistent field */
 private Set dbJobParam;

 private Vector jobParams = new Vector();

 /** full constructor */
 public JobInfo(java.lang.String jobName, java.lang.String groupName,
   java.lang.String jobClassName, java.lang.String cronExp,
   Set dbJobParam) {
  this.jobName = jobName;
  this.groupName = groupName;
  this.jobClassName = jobClassName;
  this.cronExp = cronExp;
  this.dbJobParam = dbJobParam;
 }

 /** default constructor */
 public JobInfo() {
 }

 public java.lang.Long getId() {
  return this.id;
 }

 public void setId(java.lang.Long id) {
  this.id = id;
 }

 public java.lang.String getJobName() {
  return this.jobName;
 }

 public void setJobName(java.lang.String jobName) {
  this.jobName = jobName;
 }

 public java.lang.String getGroupName() {
  return this.groupName;
 }

 public void setGroupName(java.lang.String groupName) {
  this.groupName = groupName;
 }

 public java.lang.String getJobClassName() {
  return this.jobClassName;
 }

 public void setJobClassName(java.lang.String jobClassName) {
  this.jobClassName = jobClassName;
 }

 public java.lang.String getCronExp() {
  return this.cronExp;
 }

 public void setCronExp(java.lang.String cronExp) {
  this.cronExp = cronExp;
 }

 public java.util.Set getDbJobParam() {
  return this.dbJobParam;
 }

 public void setDbJobParam(java.util.Set dbJobParam) {
  this.dbJobParam = dbJobParam;
 }

 public String toString() {
  return new ToStringBuilder(this).append("id", getId()).toString();
 }

 public boolean equals(Object other) {
  if (!(other instanceof JobInfo))
   return false;
  JobInfo castOther = (JobInfo) other;
  return new EqualsBuilder().append(this.getId(), castOther.getId())
    .isEquals();
 }

 public int hashCode() {
  return new HashCodeBuilder().append(getId()).toHashCode();
 }

 /**
  * @return Returns the jobParams.
  */
 public Vector getJobParams() {
  return jobParams;
 }

 /**
  * @param jobParams
  *            The jobParams to set.
  */
 public void setJobParams(Vector jobParams) {
  this.jobParams = jobParams;
 }

 public void addParam(JobParam param) {
  this.jobParams.add(param);
 }

}

 

6. add JobParam class

public class JobParam {
 /** identifier field */
 private Long id;

 /** persistent field */
 private String name;

 /** persistent field */
 private String value;

 /** nullable persistent field */
 private Long jobinfoId;

 /** full constructor */
 public JobParam(java.lang.String name, java.lang.String value,
   java.lang.Long jobinfoId) {
  this.name = name;
  this.value = value;
  this.jobinfoId = jobinfoId;
 }

 /** default constructor */
 public JobParam() {
 }

 /** minimal constructor */
 public JobParam(java.lang.String name, java.lang.String value) {
  this.name = name;
  this.value = value;
 }

 public java.lang.Long getId() {
  return this.id;
 }

 public void setId(java.lang.Long id) {
  this.id = id;
 }

 public java.lang.String getName() {
  return this.name;
 }

 public void setName(java.lang.String name) {
  this.name = name;
 }

 public java.lang.String getValue() {
  return this.value;
 }

 public void setValue(java.lang.String value) {
  this.value = value;
 }

 public java.lang.Long getJobinfoId() {
  return this.jobinfoId;
 }

 public void setJobinfoId(java.lang.Long jobinfoId) {
  this.jobinfoId = jobinfoId;
 }

 public String toString() {
  return new ToStringBuilder(this).append("id", getId()).toString();
 }

 public boolean equals(Object other) {
  if (!(other instanceof JobParam))
   return false;
  JobParam castOther = (JobParam) other;
  return new EqualsBuilder().append(this.getId(), castOther.getId())
    .isEquals();
 }

 public int hashCode() {
  return new HashCodeBuilder().append(getId()).toHashCode();
 }
}

 

 

7. execute up the job

public class CiSyncJob implements Job {

 public CiSyncJob() {
  // init
 }

 

 public void execute(JobExecutionContext arg0) throws JobExecutionException {
  //do something
 }

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值