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 stub
10         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 stub
15         try{
16         //1、获得一个scheduler
17         SchedulerFactory sf=new StdSchedulerFactory();
18         Scheduler scheduler =sf.getScheduler();
19         //2、获得一个jobDetail
20         JobDetail job = JobBuilder.newJob(MyJob.class)
21                  .withIdentity("myJob")
22                  .build();
23 
24         //3、获得一个trigger
25          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的内容会持续更新!

谢谢!

posted @ 2016-07-16 12:00  良工说技术  阅读(9099)  评论(2编辑  收藏  举报