Quartz,企业级的计划/日程安排(job schedule)系统(1)-介绍

类别:Java 点击:0 评论:0 推荐:

什么是job schedule system?
    job schedule system是负责在预定义的时间执行或者通知某个应用组件的系统。举个例子来说,比如在每周一早上9:30发送email通知客户最新的业务情况。

java.util.Timer和java.util.TimerTask
    Timer和TimerTask是可以完成job schedule的两个jdk提供的类,不过这不能称为一个system。Timer和TimerTask是很简单的,不直接支持持久化任务,线程池和类似日历(calendar-like)的计划安排,在完成一些高级功能上开发人员要进行大量的扩展。

Quartz的简单介绍
    Quartz是opensymphony组织专攻job scheduling领域又一个开源利器,可以到http://www.opensymphony.com/quartz查看详细信息。Quartz是轻量级的组件,开发人员只需要加载单独的jar包就可以利用Quartz强大的日程安排功能。当然,假如你为Quartz配备了数据库持久化任务的特性,Quartz也可以很好的利用这一点,从而在机器重启后还能够记住你原先安排的计划。

    Quartz中我们接触最多的接口使Scheduler接口,该接口的提供了计划安排的功能,比如schedule/unschedule计划、start/pause/stop Scheduler.

    Quartz提供一些常用的Listener(JobListener,TriggerListener,SchedulerListener)用于完全的监视计划安排和执行情况。

开始我们的Quartz之旅

 HelloWorld example:

想必大家很想看一个HelloWorld的例子了吧,那么还是以HellowWorld开始。

import java.util.Date;
 import org.quartz.Job;
 import org.quartz.JobDetail;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.quartz.Scheduler;
 import org.quartz.SchedulerFactory;
 import org.quartz.Trigger;
 import org.quartz.impl.StdSchedulerFactory;
 /**
  * @author snowway
  * @version $Id$
  */
 public class SayHelloWorldJob implements Job{
     /*
      * (non-Javadoc)
      *
      * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
      */
     public void execute(JobExecutionContext context) throws JobExecutionException{
         System.out.println("hello world!");
     }

     public static void main(String[] args) throws Exception{
         SchedulerFactory factory = new StdSchedulerFactory();
         Scheduler scheduler = factory.getScheduler();

         JobDetail jobDetail = new JobDetail("SayHelloWorldJob",
                 Scheduler.DEFAULT_GROUP,
                 SayHelloWorldJob.class);

         Trigger trigger = new SimpleTrigger("SayHelloWorldJobTrigger",
                 Scheduler.DEFAULT_GROUP,
                 new Date(),
                 null,
                 0,
                 0L);
         scheduler.scheduleJob(jobDetail, trigger);
         scheduler.start();
     }
 }

为了简单起见,我把main方法写在SayHelloWorldJob中了,执行SayHelloWorldJob可以看到控制台打印hello world.

 回顾Hello World example:

 Job是什么?
 接口Job是每个业务上需要执行的任务需要实现的接口,该接口只有一个方法:

 package org.quartz;

    public interface Job {

      public void execute(JobExecutionContext context)
        throws JobExecutionException;
    }

本文地址:http://com.8s8s.com/it/it10801.htm