Quartz快速入门

Quartz快速入门


写此文章时的最新版是2.2.1。
 
2.解压缩将基本包quartz-2.2.1.jar放到工程中,如果你工程中连log4j都没有的话,那就把日志相关的几个jar包一起放到工程中。
 
3.配置
创建quartz.properties文件
org.quartz.scheduler.instanceName MyScheduler---------scheduler的名字,随便起一个名字(还是起个有点意义的名字吧)
org.quartz.threadPool.threadCount= 3 --------线程池中最大线程数是3(最多三个job同时执行)
org.quartz.scheduler.skipUpdateCheck true
---跳过Quartz的自动更新检查
4.一下是代码了,为了方便将官方的代码靠过来稍作修改,代码里有标明。
 1 import org.quartz.Scheduler;
 2 import org.quartz.SchedulerException;
 3 import org.quartz.impl.StdSchedulerFactory;
 4 
 5 publicclassQuartzTest{
 6 
 7     publicstaticvoid main(String[] args){
 8 
 9         try{
10             // Grab the Scheduler instance from the Factory
11             //初始化scheduler,官方文档使用的后面的内容,所有配置都是默认值,为了使用我们辛苦配置的配置文件,我们用前面的方法。
12             Scheduler scheduler = new StdSchedulerFactory("quartz.properties").getScheduler();//StdSchedulerFactory.getDefaultScheduler();
13 
14             // and start it off
15             scheduler.start();
16             //---------------插入执行的代码--------------------------
17             scheduler.shutdown();
18 
19         }catch(SchedulerException se){
20             se.printStackTrace();
21         }
22     }
23 }

 

以上代码就可以执行了,不过什么都没干,只是启动了和关闭了一下。- - !
5. do something
    要do sth需要Job,Trigger这些都是Quartz里的基本元素。看名字也能明白Job是干活的蓝领。Trigger是触发Job执行的,定时任务最关键的时间就是靠定义Trigger是定义的。
创建Job
新建一个类实现Job接口并写execute方法实现。
 1 import java.util.Date;
 2 
 3 import org.apache.log4j.Logger;
 4 import org.quartz.Job;
 5 import org.quartz.JobExecutionContext;
 6 import org.quartz.JobExecutionException;
 7 
 8 public class JobTest implements Job{
 9 
10     private static Logger logger = Logger.getLogger(JobTest.class);
11     
12     public void execute(JobExecutionContext arg0) throws JobExecutionException {
13         logger.info("Hello world-----myQuartz-------class:JobTest  method:execute" + new Date());
14         
15     }
16     
17 }
18 然后,在第4步-----插入执行的代码-------的位置插入以下代码
19     try {
20             //定义一个任务,并绑定JobTest(自己创建的任务类)
21             JobBuilder jobBuilder = JobBuilder.newJob(JobTest.class);
22             jobBuilder.withIdentity("Job1", "Group1");
23             
24             JobDetail job = jobBuilder.build();
25                     //定义一个触发任务执行的触发器
26             TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
27             triggerBuilder.withIdentity("Trigger1", "TriggerGroup1");
28             //定义执行时间
29             Date runTime = DateBuilder.evenSecondDate(new Date());
30             
31             triggerBuilder.startAt(runTime);
32             triggerBuilder.withSchedule(SimpleScheduleBuilder.simpleSchedule().
33                     withIntervalInMilliseconds(10000).repeatForever());
34             
35             Trigger trigger = triggerBuilder.build();
36 
37                      scheduler.scheduleJob(job, trigger);
38             logger.info(job.getKey() + " will run at...: " + runTime);
39             scheduler.start();
40             logger.info("------- Started Scheduler -----------------");
41             
42             logger.info("------- Waiting 65 seconds... -------------");
43             try {
44                 Thread.sleep(65000);
45             } catch (InterruptedException e) {
46                 e.printStackTrace();
47             }
48             logger.info("------- Shutting Down ---------------------");
49             scheduler.shutdown();
50             logger.info("------- Shutdown Complete -----------------");
51         } catch (SchedulerException e) {
52             e.printStackTrace();
53         }
View Code

 

汗!可算写完了,这么长。最好弄个Util工具类
一下是我写的工具类,主要实现job和trigger的创建,大家借鉴:
 
 1 import java.util.Date;
 2 
 3 import org.quartz.Job;
 4 import org.quartz.JobBuilder;
 5 import org.quartz.JobDetail;
 6 import org.quartz.Scheduler;
 7 import org.quartz.SchedulerException;
 8 import org.quartz.SimpleScheduleBuilder;
 9 import org.quartz.Trigger;
10 import org.quartz.TriggerBuilder;
11 import org.quartz.impl.StdSchedulerFactory;
12 
13 /**
14  * 定时任务工具类
15  * @author llhua
16  *
17  */
18 public class TaskUtil {
19 /**
20 * 初始化一个全部默认配置的scheduler
21 * @return
22 * @throws SchedulerException
23 */
24 public static Scheduler getDefaultScheduler() throws SchedulerException{
25 return StdSchedulerFactory.getDefaultScheduler();
26 }
27 
28 /**
29 * 初始化一个通过配置文件配置的配置的scheduler
30 * @return
31 * @throws SchedulerException
32 */
33 public static Scheduler getScheduler(String confFile) throws SchedulerException{
34 return new StdSchedulerFactory(confFile).getScheduler();
35 }
36 
37 /**
38 * 定义一个job
39 * @param jobClazz
40 * @param name
41 * @param group
42 * @return
43 */
44 public static JobDetail getJob(Class<? extends Job> jobClazz, String name, String group){
45 return JobBuilder.newJob(jobClazz).withIdentity(name, group).build();
46 }
47 
48 /**
49 * 定义一个立即开始的触发器(.startNow())
50 * @param schedBuilder
51 * @param name
52 * @param group
53 * @return
54 * 
55 * SimpleScheduleBuilder一般用法
56 * SimpleScheduleBuilder.simpleSchedule().
57 withIntervalInMilliseconds(10000).repeatForever()
58 */
59 public static Trigger getSimpleTrigger(SimpleScheduleBuilder schedBuilder, String name, String group){
60 return TriggerBuilder.newTrigger().withIdentity(name, group).startNow().withSchedule(schedBuilder).build();
61 }
62 /**
63 * 定义一个在指定时间开始的触发器(.startAt())
64 * @param schedBuilder
65 * @param name
66 * @param group
67 * @return
68 */
69 public static Trigger getSimpleTrigger(Date runTime, SimpleScheduleBuilder schedBuilder, String name, String group){
70 return TriggerBuilder.newTrigger().withIdentity(name, group).startAt(runTime).withSchedule(schedBuilder).build();
71 }
72 
73 public static Trigger getCronTrigger(){
74 return null;
75 }
76 
77 public static Trigger getNthIncludedDayTrigger(){
78 return null;
79 }
80 
81 }
View Code

 

说明:最下面有三个get Trigger的方法代表了Quartz中已经有的三种Trigger,简单的已经可以实现基本的应用了,如有复杂应用可以实现下面两种。在下目前还没用到。





posted @ 2013-10-28 22:07  学习记录  阅读(987)  评论(0编辑  收藏  举报