quartz-2.0.2学习小记

    Quartz 是一个功能强大的作业调度工具,相当于数据库中的 Job、Windows 的计划任务、Unix/Linux 下的 Cron,但 Quartz 可以把排程控制的更精细。也许大多数人听说 Quartz 是在学习或使用 Spring 的时候,也就是 Spring 整合了Quartz。由于项目中使用了Quartz来实现定时通过接口请求数据的功能,这几天自己查阅资料学习Quartz,在此记录一下。现在分三个步骤演示一下Quartz的使用:在控制台使用Quartz、整合Spring与Quartz、将Quartz任务信息持久化到数据库中。

  我的开发环境:Eclipse3.6+jdk1.6.0_26+Tomcat6.0.20,现在Quartz最新版本是2.0.2,下载地址 http://quartz-scheduler.org/downloads/catalog。创建一个Web应用程序,将Quartz2.0.2解压后lib文件夹下的jar包(quartz依赖的包)以及quartz-2.0.2.jar和quartz-oracle-2.0.2.jar(支持Oracle的)拷贝到WEB-INF/lib下,这样即完成示例的准备工作。

一、在控制台使用Quartz

首先创建一个简单的Job,ExampleJob.java代码如下:

package com.petrochina.job;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ExampleJob implements Job {
    private Logger logger = LoggerFactory.getLogger(ExampleJob.class);
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        System.out.print("I can count to 10 ->");
        // 输出1-10
        for (int i = 1; i <= 10; i++) {
            System.out.print(" | " + i + " ");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ie) {
            }
        }
        System.out.println("<- See I did it.");
        JobDataMap properties = context.getJobDetail().getJobDataMap();
        System.out.println("Previous Fire Time: " + context.getPreviousFireTime());// 上次执行时间
        System.out.println("Current Fire Time: " + context.getFireTime());// 本次执行时间
        System.out.println("Next Fire Time: " + context.getNextFireTime());// 下一次执行时间
    }
}

控制台程序如下:

package com.petrochina.job;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.Trigger;
import org.quartz.impl.StdSchedulerFactory;
public class Console {
    public static void main(String[] args) {
        try {
            testJob();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 测试使用quartz实现的调度任务
    public static void testJob() throws SchedulerException, InterruptedException {
        // 创建调度者工厂
        SchedulerFactory sfc = new StdSchedulerFactory();
        // 通过工厂创建一个调度者
        Scheduler scheduler = sfc.getScheduler();
         /*//----------Quartz1.8.4的写法---------------//

         // 创建一个任务,命名“myjob”,组名“group1”,对应工作类“ExampleJob”
         JobDetail myJob = new JobDetail("myjob", "group1", ExampleJob.class);
         // 使用触发器工具类创建一个每隔15秒执行一次的触发器
         Trigger trigger = TriggerUtils.makeSecondlyTrigger(15);
         trigger.setName("mytrigger");
         trigger.setStartTime(new Date());
         */
        //----------Quartz 2.0.2的写法---------------//
        JobDetail myJob = newJob(ExampleJob.class).withIdentity("myJob", "job-group").build();
        Trigger trigger = newTrigger().withIdentity("mytrigger", "trigger-group").startAt(new Date())
                .withSchedule(simpleSchedule().withIntervalInSeconds(15).repeatForever()).build();nbsp;       // 调度任务
        Date startDate = scheduler.scheduleJob(myJob, trigger);
        System.out.println(myJob.getKey() + " will start at:" + startDate.toLocaleString());
        // 开始运行调度程序
        scheduler.start();        Thread.sleep(20000);// 等待20秒
        scheduler.shutdown();// 关闭调度程序        SchedulerMetaData metaData = scheduler.getMetaData();
        System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
        System.out.println("Test end------>");    }}

执行结果如下:

job-group.myJob will start at:2011-9-2 15:15:02
2011-09-02 15:15:02,046 [main] INFO  [org.quartz.core.QuartzScheduler] - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
I can count to 10 -> | 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 10 <- See I did it.
Previous Fire Time: null
Current Fire Time: Fri Sep 02 15:15:02 CST 2011
Next Fire Time: Fri Sep 02 15:15:17 CST 2011
I can count to 10 -> | 1  | 2  | 3  | 4  | 5  | 6 2011-09-02 15:15:22,046 [main] INFO  [org.quartz.core.QuartzScheduler] - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED shutting down. 

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值