`
arlord
  • 浏览: 5067 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Quartz 任务组件的简单demo

阅读更多
对于Quartz来说每个任务都要实现它的接口Job,重写里面的execute方法。
以下的demo,简单介绍了Quartz的任务创建、装载、执行。更详细的信息可参考Quartz的API


import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerUtils;
import org.quartz.impl.StdSchedulerFactory;

public class SimpleJob implements Job{

     public void execute(JobExecutionContext context) throws JobExecutionException {
          //通过JobExecutionContext 获取JobDetail中的JobDataMap
          JobDataMap map = context.getJobDetail().getJobDataMap();
          System.out.println("map value: " + map.get("character"));
          System.out.println("time:  " + context.getJobDetail().getName() + " currentTime: " + System.currentTimeMillis());
         
          try {
               JobDetail j = new StdSchedulerFactory().getScheduler().getJobDetail("job", "group123");
               System.out.println(j.getName() + "------" + j.getGroup() + "----" + j.getJobClass());
          } catch (SchedulerException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }
     }
    
     public static void main(String[] args) {
          //构建任务日程表工程,使用StdSchedulerFactory,该类已经实现接口SchedulerFactory
          SchedulerFactory factory = new StdSchedulerFactory();
          try {
               //获取任务日程队列
               Scheduler scheduler = factory.getScheduler();
               //启动
               scheduler.start();
               System.out.println("start time: " + System.currentTimeMillis());
               //使用TriggerUtils生成触发时间
               long ts = TriggerUtils.getNextGivenSecondDate(null, 10).getTime();
               //构建属于SimpleJob的JobDetail,对于Scheduler来说执行的任务是每个JobDetail,
               //而JobDetail是针对这个SimpleJob来构建的,所以任务执行的时候是执行SimpleJob
               JobDetail jobDetail = new JobDetail("job", "group123", SimpleJob.class);
               //构建触发器,把触发时间等信息封装好
               SimpleTrigger trigger = new SimpleTrigger("trigger", "group123", "job", "group123", new Date(ts), null, 4, 10000);
               JobDataMap map = new JobDataMap();
               Person p = new Person();
               p.setId(12);
               p.setName("十二少");
               map.put("person", p);
               map.put("character", "brave");
               //把JobDataMap 对象注入到jobDetail中,到任务执行的时候可以获取JobDetail
               //也可以通过JobDetail获取JobDataMap
               jobDetail.setJobDataMap(map);
               //装载任务到任务日程表中,由于任务已经启动了,所以到了触发时间,任务将会执行
               scheduler.scheduleJob(jobDetail, trigger);
              
              
          } catch (SchedulerException e) {
               // TODO Auto-generated catch block
               e.printStackTrace();
          }
         
     }

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics