Quartz-2.2.x 入门

来源:互联网 发布:linux重启网卡失败 编辑:程序博客网 时间:2024/06/07 18:02

介绍

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

  • 官方网站:Quartz-2.2.x文档
  • 源码下载:Downloads

安装

如果是直接下载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会好理解些 SchedulerFactory Scheduler工厂类接口,具体实现有StdSchedulerFactory JobBuilder JobDetail工厂类,用于创建JobDetail实例并提供配置方法 TriggerBuilder Trigger工厂类,用于创建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 0
原创粉丝点击