转载 --请到原文查看,自用

由于项目中需要用到定时执行任务,后来查资料发现有Quartz这么一个任务调度框架,但是网上的大部分资料几乎都是之前的版本,Quartz-2.2.1好像经过了改版,与先前的版本在用法上有那么一些出入,2.2.1里面好多方法都被弃用了,然后经过一番折腾,算是会简单的使用了。下面简单的介绍一下:

官网:http://www.quartz-scheduler.org/

下载完进行解压会得到这六个jar包文件:



这里只介绍一下简单的用法:

1、Job接口:这个接口里面只定义了一个方法,excute
[java] view plain copy print?在CODE上查看代码片派生到我的代码片
void execute(JobExecutionContext context) 

然后定义一个类实现该接口,就可以定义自己需要执行的任务了,JobExecutionContext类提供调度上下文的各种信息

2、JobDetail:用于描叙Job实现类及其他的一些静态信息

3、Trigger:描叙触发Job执行的时间触发规则

4、Scheduler:运行容器,使用SchedulerFactory创建Scheduler实例

示例代码:

1、新建一个TestJob类实现Job接口

[java] view plain copy print?在CODE上查看代码片派生到我的代码片
package com.quartz; 
 
import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
 
import org.quartz.Job; 
import org.quartz.JobExecutionContext; 
import org.quartz.JobExecutionException; 
import org.quartz.JobKey; 
/**
* 任务执行类  实现  Job接口
* 该接口只有一个方法
* @author feizi
* @time 2015-1-29下午4:51:00
*/ 
public class TestJob implements Job { 
 
    //开发者实现该接口定义需要执行的任务。JobExecutionContext类提供调度上下文的各种信息 
    public void execute(JobExecutionContext context) throws JobExecutionException { 
        //通过上下文获取 
        JobKey jobKey = context.getJobDetail().getKey(); 
         
        DateFormat df = new SimpleDateFormat("yyyy年MM月dd日  HH时mm分ss秒"); 
        System.out.println(jobKey + "在" + df.format(new Date()) + "时,输出了:Hello World!!!"); 
         
        //do more这里可以执行其他需要执行的任务 
    } 
 




2、测试任务调度

[java] view plain copy print?在CODE上查看代码片派生到我的代码片
package com.quartz; 
 
import java.util.Date; 
 
import org.quartz.DateBuilder; 
import org.quartz.JobBuilder; 
import org.quartz.JobDetail; 
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; 
 
/**
* 任务调度
* @author feizi
* @time 2015-1-29下午4:47:57
*/ 
public class QuartzDemo { 
 
    public void run() throws SchedulerException{ 
         
        System.out.println("------- 初始化 ----------------------");   
         
        //通过SchedulerFactory工厂类获取Scheduler 
        SchedulerFactory sf = new StdSchedulerFactory(); 
         
        System.out.println("------- 初始化完成 -----------");   
         
        //任务执行时间 
//      Date runTime = DateBuilder.evenMinuteDate(new Date()); 
        Date runTime = DateBuilder.evenSecondDateAfterNow(); 
         
        System.out.println("------- 将Job加入Scheduler中  ------");   
         
        //用于描叙Job实现类及其他的一些静态信息,构建一个作业实例 
        JobDetail jobDetail = JobBuilder.newJob(TestJob.class) 
                        .withIdentity("testJob_1", "group_1") 
                        .build(); 
         
         
        //描叙触发Job执行的时间触发规则,Trigger实例化一个触发器 
        Trigger trigger = TriggerBuilder.newTrigger()//创建一个新的TriggerBuilder来规范一个触发器 
                        .withIdentity("trigger_1", "group_1")//给触发器一个名字和组名 
//                      .startNow()//立即执行 
                        .startAt(runTime)//设置触发开始的时间 
                        .withSchedule 
                        ( 
                            SimpleScheduleBuilder.simpleSchedule() 
                            .withIntervalInSeconds(2)//时间间隔 
                            .withRepeatCount(5)//重复次数(将执行6次) 
                        ) 
                        .build();//产生触发器 
         
        //运行容器,使用SchedulerFactory创建Scheduler实例 
        Scheduler sched = sf.getScheduler(); 
         
        //向Scheduler添加一个job和trigger 
        sched.scheduleJob(jobDetail, trigger); 
        System.out.println(jobDetail.getKey() + " 运行在: " + runTime);  
         
        sched.start(); 
    } 
     
    /**
     * 调度测试
     * @param args
     * @throws SchedulerException 
     */ 
    public static void main(String[] args) throws SchedulerException { 
        QuartzDemo demo = new QuartzDemo(); 
        demo.run(); 
    } 
 

猜你喜欢

转载自vitoer.iteye.com/blog/2348763