Quartz-2.2.x 入门

介绍

Quartz是一个开源的计划任务工具库。

安装

如果是直接下载jar包

将quartz-2.2.x.jar包放到classpath目录下即可。

如果是maven项目中引用,则坐标如下:

  <!-- 主要实现包 -->
  <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
  </dependency>
  <!-- [可选]官方实现Job的工具包 -->
  <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.1</version>
  </dependency>

使用入门

基本概念

类/接口描述
Scheduler计划任务容器,提供任务和触发器的CRUD操作
JobDetail任务信息,如:id,name和绑定自定义数据等
Trigger触发器信息,如:开始时间,计划类型(定时/循环)等
Job触发动作,区别于JobDetail本人认为叫Action会好理解些
SchedulerFactoryScheduler工厂类接口,具体实现有StdSchedulerFactory
JobBuilderJobDetail工厂类,用于创建JobDetail实例并提供配置方法
TriggerBuilderTrigger工厂类,用于创建Trigger实例并配置方法

结构图示

结构图示

Hello world应用

  1. 关于内部类的说明,请参考《内部类的一些事
  2. 本例为了说明Quartz的TriggerBuilder的withSchedule方法,所以把生成Trigger部分拆分成两段,按照官网上的例子,其实可以串联方式直接build。
import org.quartz.Job;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

public class HelloWorld {
    // 如果使用内部类必须是静态内部类方式实现Job接口,
    // 否则Quartz反射生成不了Job实例
    public static class NestedJob implements Job{
        // 实现execute接口,任务调度时触发以下方法
        public void execute(JobExecutionContext ctx)
                throws JobExecutionException {
            // TODO Auto-generated method stub
            try {
                // 获取本次触发的实例id
                System.out.println("action " + ctx.getFireInstanceId() + " begin:"
                        + ctx.getFireTime());
                Thread.sleep(4 * 1000L);
                System.out.println("action " + ctx.getFireInstanceId() + " end:"
                        + ctx.getFireTime());
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        // 1.实例化工厂类
        SchedulerFactory sf = new StdSchedulerFactory();
        try {
            // 2.得到一个StdScheduler实例,创建线程池
            Scheduler s = sf.getScheduler();
            // 标识开始
            s.start();
            // 3.通过JobBuilder工厂,生成JobDetail并绑定NestedJob类
            JobDetail jd = JobBuilder.newJob(NestedJob.class)
                    .withIdentity("myjob", "mygroup").build();
            // 4.定义触发器的计划任务,从“现在”开始计划
            TriggerBuilder<Trigger> tb = TriggerBuilder.newTrigger().startNow();
            // 每隔3s执行一次,并一直循环
            Trigger t = tb
                    .withSchedule(
                            SimpleScheduleBuilder.repeatSecondlyForever(3))
                    .withIdentity("mytrigger", "mygroup").build();
            // 将任务和触发器注册到计划任务容器中
            s.scheduleJob(jd, t);
            // 本例需要暂停主线程,让任务线程跑起来
            Thread.sleep(10 * 1000L);
            // 强制停止所有任务线程,删除所有注册的任务信息
            s.shutdown();

        } catch (SchedulerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

运行结果

action 1464458138847 begin:Sun May 29 01:55:39 CST 2016
action 1464458138848 begin:Sun May 29 01:55:41 CST 2016
action 1464458138847 end:Sun May 29 01:55:39 CST 2016
action 1464458138849 begin:Sun May 29 01:55:44 CST 2016
action 1464458138848 end:Sun May 29 01:55:41 CST 2016

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值