Quartz——定时任务

Posted popcorn丫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Quartz——定时任务相关的知识,希望对你有一定的参考价值。

Quartz之前版本的使用:http://blog.csdn.net/huihuimimi17/article/details/8215779

 

2之后的版本使用:简单使用

package com.bxw;

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;

public class Demo1Test {
    public void run() throws SchedulerException{
        System.out.println("---初始化ing---");
         //通过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 jd = JobBuilder.newJob(Demo1.class).withIdentity("testDemo1","group1").build();
        
        //描叙触发Job执行的时间触发规则,Trigger实例化一个触发器  
        Trigger trigger = TriggerBuilder.newTrigger()//创建一个新的TriggerBuilder来规范一个触发器 
                        .withIdentity("trigger1","group1")//给触发器起一个名字和组名
                        //.startNow()//立即执行
                        .startAt(runTime)//设置触发时间
                        .withSchedule(
                                    SimpleScheduleBuilder.simpleSchedule()
                                    .withIntervalInSeconds(2)//时间间隔
                                    //.withRepeatCount(5)//重复次数,将执行6次
                                ).build();//产生触发器
          //运行容器,使用SchedulerFactory创建Scheduler实例  
        Scheduler sched = sf.getScheduler();
        
        //向scheduler添加一个job和trigger
        sched.scheduleJob(jd,trigger);
        System.out.println(jd.getKey()+"运行在:"+runTime);
        sched.start();
    }
    
    public static void main(String[] args) throws SchedulerException {
        Demo1Test dt = new Demo1Test();
        dt.run();
    }
}

步骤:1.得到一个Sceduler    2.新建一个作业    3.新建一个触发器    4.想Scheduler添加作业和触发器    5.sceduler.start()

 

工具类:

package com.bxw;

import org.quartz.Job;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
 * 任务调度公共类
 * @remark
 * @author feizi
 * @time 2015-3-23下午3:04:12
 */
public class QuartzUtil {

    private final static String JOB_GROUP_NAME = "QUARTZ_JOBGROUP_NAME";//任务组
    private final static String TRIGGER_GROUP_NAME = "QUARTZ_TRIGGERGROUP_NAME";//触发器组
    private static Logger log = LoggerFactory.getLogger(QuartzUtil.class);//日志

    /**
     * 添加任务的方法
     * @param jobName  任务名
     * @param triggerName  触发器名
     * @param jobClass  执行任务的类
     * @param seconds  间隔时间
     * @throws SchedulerException
     */
    public static void addJob(String jobName,String triggerName,Class<? extends Job> jobClass,int seconds) throws SchedulerException{
        log.info("==================initialization=================");

        //创建一个SchedulerFactory工厂实例
        SchedulerFactory sf = new StdSchedulerFactory();

        //通过SchedulerFactory构建Scheduler对象 
        Scheduler sche = sf.getScheduler();

        log.info("===================initialize finshed===================");

        log.info("==============add the Job to Scheduler==================");  

        //用于描叙Job实现类及其他的一些静态信息,构建一个作业实例
        JobDetail jobDetail = JobBuilder.newJob(jobClass)
                                .withIdentity(jobName, JOB_GROUP_NAME)
                                .build();

        //构建一个触发器,规定触发的规则
        Trigger trigger = TriggerBuilder.newTrigger()//创建一个新的TriggerBuilder来规范一个触发器
                            .withIdentity(triggerName, TRIGGER_GROUP_NAME)//给触发器起一个名字和组名
                            .startNow()//立即执行
                            .withSchedule(
                                SimpleScheduleBuilder.simpleSchedule()
                                .withIntervalInSeconds(seconds)//时间间隔  单位:秒
                                .repeatForever()//一直执行
                            )
                            .build();//产生触发器

        //向Scheduler中添加job任务和trigger触发器
        sche.scheduleJob(jobDetail, trigger);

        //启动
        sche.start();
    }

    /**
     * 测试
     * @param args
     * @throws SchedulerException 
     */
    public static void main(String[] args) throws SchedulerException {
        QuartzUtil.addJob("任务一", "触发器一", Demo1.class, 2);
        QuartzUtil.addJob("任务二", "触发器二", Demo2.class, 4);
    }
}

 

以上是关于Quartz——定时任务的主要内容,如果未能解决你的问题,请参考以下文章

spring定时任务quartz

spring + quartz定时任务,以及修改定时任务

以代码的方式管理quartz定时任务的暂停重启删除添加等

Hosted Services+Quartz实现定时任务调度

quartz spring 实现动态定时任务

Quartz-定时任务框架