你的位置:首页 > Java教程

[Java教程]quartz使用(一)


在项目中经常会碰到定时任务,quartz是一款非常优秀的开源框架, 提供了定时任务的支持,还支持任务的持久化,并且提供了对数据库的支持。下面首先对quartz做一个简单介绍,并附上一个小例子。

1、下面是quartz的官网:

http://www.quartz-scheduler.org//,打开网址我们可以看到quartz最新的版本是2.2.3这里我也以此版本作为例子的环境。quartz从2.0版本其做了很大的改变,具体的变化可以自己查阅相关资料,在此不赘述。

2、我这里下载的是quartz-2.2.3-distribution.tar.gz,用解压缩工具解压出来得到如下图的文件目录结构,

docs:quartz的文档信息,包含了和数据库相关的建表sql;

examples:例子;

javadoc:使用java的doc,可以使用jd2chm工具转化为chm格式的文档;

lib:quartz的jar包,包含了使用quartz的所有包(依赖包和quartz的jar包);

licenses:许可文件;

src:quartz的源码;

3、从lib包里我们可以看到quartz的日志系统使用的是slf4j,但是其真正的日志系统是log4j,具体的日志框架描述,可以参看我别的文章。

4、quartz即可以用在java工程中,也可以用在javaweb项目中,这里以javaweb项目为环境做例子。

5、把quartz文件夹下的lib文件夹里的所有jar包放到项目的lib目录下。

6、经过上面的步骤就把quartz引入到了工程中。

下面是具体的例子的说明及代码:

一、首先,要创建一个任务,quartz规定任务必须实现org.quarta.Job接口,此接口就一个方法execute,这个方法就是任务执行的时候允许的方法,具体的业务实现在这个方法里,我这里只进行了简单的打印,

 1 package com.cn.myScheduler; 2  3 import org.quartz.Job; 4 import org.quartz.JobExecutionContext; 5 import org.quartz.JobExecutionException; 6 public class MyJob implements Job { 7   @Override 8   public void execute(JobExecutionContext arg0) throws JobExecutionException { 9     // TODO Auto-generated method stub10     System.out.println("this is my first scheduler!");11   }12 13 }

二、创建完任务之后,我们还要创建一个包含任务信息的jobDetail,一个管理任务执行的促发器trigger,最后就是调度任务,

 1 package com.cn.myScheduler; 2  3 import org.quartz.JobBuilder; 4 import org.quartz.JobDetail; 5 import org.quartz.Scheduler; 6 import org.quartz.SchedulerException; 7 import org.quartz.SchedulerFactory; 8 import org.quartz.SimpleScheduleBuilder; 9 import org.quartz.Trigger;10 import org.quartz.TriggerBuilder;11 import org.quartz.impl.StdSchedulerFactory;12 public class TestMyJob {13   public static void main(String[] args) {14     // TODO Auto-generated method stub15     try{16     //1、获得一个scheduler17     SchedulerFactory sf=new StdSchedulerFactory();18     Scheduler scheduler =sf.getScheduler();19     //2、获得一个jobDetail20     JobDetail job = JobBuilder.newJob(MyJob.class)21         .withIdentity("myJob")22          .build();23 24     //3、获得一个trigger25     Trigger trigger = TriggerBuilder.newTrigger()26          .withIdentity("trigger1", "group1")27          .startNow()28          .withSchedule(SimpleScheduleBuilder.simpleSchedule()29              .withIntervalInSeconds(40)30              .withRepeatCount(10))31              .build();32     //4、把任务和触发器放到scheduler中33     scheduler.scheduleJob(job, trigger);34     //5、开始任务调度35     scheduler.start();36     }37     catch(SchedulerException e){38       e.printStackTrace();39     }40   }41 42 }

注释1:创建一个scheduler,scheduler负责所有任务的调度。

注释2:创建一个包含任务信息的jobDetail,指定任务的实现类为MyJob.class,使用withIdentity方法指定任务名称,还可以用第二个参数指定任务的组名

注释3:创建一个任务促发器,指定了促发器的名称“trigger1”和促发器的组名“group1”;设置了促发的时间为当前促发,且每隔40S执行一次,一共执行10次

注释4:把jobDetail和trigger放到scheduler中

注释5:启动scheduler

运行程序可以看到程序的输出。

以上就是一个简单的quartz定时任务。

有关quartz的内容会持续更新!

谢谢!