quartz 2.x学习使用

Quartz API

Quartz API核心接口有:
Scheduler – 与scheduler交互的主要API,是运行job的容器;
Job – 你通过scheduler执行任务,你的任务类需要实现的接口;
JobDetail – 定义Job的实例;
Trigger – 触发Job的执行;
JobBuilder – 定义和创建JobDetail实例的接口;
TriggerBuilder – 定义和创建Trigger实例的接口;

Scheduler在使用之前需要实例化。一般通过SchedulerFactory来创建一个实例。
Scheduler的生命期,从SchedulerFactory创建它时开始,到Scheduler调用shutdown()方法时结束;Scheduler被创建后,可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作(如暂停Trigger)。但是,Scheduler只有在调用start()方法后,才会真正地触发trigger(即执行job),

JobDetail对象由Quartz客户端在Job被加入到scheduler时创建。它包含了Job的各种设置属性以及一个JobDataMap对象,这个对象被用来存储给定Job类实例的状态信息。Trigger对象被用来触发job的执行。你希望将任务纳入到进度,要实例化一个Trigger并且“调整”它的属性以满足你想要的进度安排。Triggers也有一个JobDataMap与之关联,这非常有利于向触发器所触发的Job传递参数。Quartz打包了很多不同类型的Trigger,但最常用的Trigge类是SimpleTrigger和CronTrigger。

SimpleTrigger用来触发只需执行一次或者在给定时间触发并且重复N次且每次执行延迟一定时间的任务。
CronTrigger按照日历触发,例如“每个周五”,每个月10日中午或者10:15分。

为什么要分为Jobs和Triggers?
jobs可以被创建并且存储在job scheduler中,而不依赖于trigger,而且,很多triggers可以关联一个job.
另外的好处就是这种“松耦合”能使与日程中的Job相关的trigger过期后重新配置这些Job, 这样以后就能够重新将这些Job纳入日程而不必重新定义它们。这样就可以更改或者替换trigger而不必重新定义与之相连的job标识符。

简单实践
建立一个Java Project,引入包这里写图片描述
1、建立Job类

package quartz.job;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class MyJob implements Job {

    @Override
    public void execute(JobExecutionContext arg0) throws JobExecutionException {
        JobDataMap data = arg0.getMergedJobDataMap();
        System.out.println("MyJob "
                + new SimpleDateFormat("yyyy-mm-dd HH:mm:ss")
                        .format(new Date()) + " someProp ---> "
                + data.getString("someProp"));
    }

}

2、构建运行程序

package quartz.main;

import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import quartz.job.MyJob;

public class Main {
    public static void main(String[] args) throws Exception {
        SchedulerFactory sf = new StdSchedulerFactory();
        Scheduler scheduler = sf.getScheduler();   //构建scheduler 
        scheduler.start();  

        //构造JobDetail 
        JobDetail jobDetail = JobBuilder.newJob(MyJob.class) //加入自己的 Job
                  .withIdentity("myJob", "group1") // name "myJob", group "group1"
                  .build();

        // Trigger the job to run now, and then every 3 seconds
        Trigger trigger = TriggerBuilder.newTrigger()
          .withIdentity("myTrigger", "group1")
          .startNow()
          .withSchedule(SimpleScheduleBuilder.simpleSchedule()
              .withIntervalInSeconds(3)  //时间间隔
//            .repeatForever()          //一直重复  
              .withRepeatCount(5))       //重复5次,启动之后会立即执行一次,所以实际执行6.build();

        scheduler.scheduleJob(jobDetail, trigger);
    }
}

执行结果
MyJob 2016-36-22 14:36:01 someProp —> null
MyJob 2016-36-22 14:36:04 someProp —> null
MyJob 2016-36-22 14:36:07 someProp —> null
MyJob 2016-36-22 14:36:10 someProp —> null
MyJob 2016-36-22 14:36:13 someProp —> null
MyJob 2016-36-22 14:36:16 someProp —> null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值