Quartz(一) 简单的使用

在服务器启动之后,定时的执行某些接口,实现某些特定的需求,监控数据库某几个字段。例如:数据库中有一张优惠券,当它的时间到期的时候,定时的更改他的状态为已过期,最好是每一天都定时查看数据库中的一些优惠券日期并更改状态。quartz很好的解决了这一个问题。

一、quartz下载

    百度输入quartz,进入官网下载,或者http://www.quartz-scheduler.org/downloads/进行下载,目前最新版本是2.2.3。
    **注意**的是:
    使用最新版本的quartz与spring集成时,spring要是3.1×版本以上的,否则版本不兼容。

二、quartz的简单使用
1、解压缩刚才下载好的quartz包,打开lib文件夹,把里面的jar包添加到新建的maven工程下。
2、简单的使用
新建java类QuartzJobFactory,并实现接口Job,重写其唯一的方法execute。该类是在”特定的时间“下被执行,如下:

package com.lzt.testMain;


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

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

public class QuartzJobFactory implements Job{

    public void execute(JobExecutionContext context) throws JobExecutionException {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("hello myJob:"+sdf.format(date));
    }

}

3、新建一个设置特定时间执行的类,也就是设置quartz相关的接口。Quartz API核心接口有:
Scheduler – 与scheduler交互的主要API;
Job – 你通过scheduler执行任务,你的任务类需要实现的接口;
JobDetail – 定义Job的实例;
Trigger – 触发Job的执行;
JobBuilder – 定义和创建JobDetail实例的接口;
TriggerBuilder – 定义和创建Trigger实例的接口;
TestQuartz类如下:

public class TestQuartz {

    public static void main(String[] args) throws SchedulerException {
        startSchedule();
        //resumeJob();

    }
     public static void startSchedule() throws SchedulerException {  
        // 创建jobDetail实例,绑定Job实现类  
            //  指明job的名称,所在组的名称,以及绑定job类  
            JobDetail jobDetail = JobBuilder
                    .newJob(QuartzJobFactory.class)
                    .withIdentity("lztJob", "zflJob")
                    .build();

            // 使用simpleTrigger规则  
            //  定义调度触发规则,比如每1秒运行一次,共运行5次  
            Trigger trigger = TriggerBuilder
                    .newTrigger()
                    .withIdentity("lztJob", "zflJob")
                    .startNow()
                    .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                            .withIntervalInSeconds(1).
                            withRepeatCount(10)).build();
             //使用cornTrigger规则  每天17点02分  
            /* Trigger trigger=TriggerBuilder.newTrigger().withIdentity("lztJob2", "zflJob2")  
                      .withSchedule(CronScheduleBuilder.cronSchedule("0 02 17 * * ? *"))  
                      .startNow().build();  */ 
            SchedulerFactory schedulerFactory = new StdSchedulerFactory();
            Scheduler scheduler = schedulerFactory.getScheduler();
            //添加job,以及其关联的trigger
            scheduler.scheduleJob(jobDetail, trigger);
            //启动job
            scheduler.start();
            //scheduler.shutdown();
     }
}

4、执行:
得到如下结果:
这里写图片描述

quartz有很多种触发器,常被使用的就是simpleTrigger和cornTrigger。simpleTrigger规则即每隔多少秒执行一次,可以执行几次,从上面测试来看每一秒执行一次,共执行了10次,该种规则常常不能满足实际的需求,所以常常使用cornTrigger规则,该触发器具体到了某年某月某个星期几某天某时某分的执行,比起simpleTrigger来说更能满足实际需求。
把上面的trigger换成cornTrigger,simpleTrigger注释掉,执行,得到如下结果:
这里写图片描述

总结:上面该类实现定时执行,离不开三个东西,即Schduler,jobDetail,Trigger。jobDetail指明job的名称,所在组的名称,以及绑定job类 ,Trigger定义调度触发规则,Schduler可以看成是一个执行容器,把Trigger和Schduler放入其中加入到任务中实现调度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值