在软件开发中,很多时候需要在特定时间的时间执行某些操作,比如每天的凌晨三点、每周的周日、每个月的15号,Apache Quartz就是一个开源的作业调度框架,可以让计划的程序任务一个预定义的日期和时间运行。这篇博客记录一下Quartz的安装、重要概念和入门例子。

一、Quartz下载

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

以2.2.3版本为例,下载 Quartz 2.2.3 .tar.gz,解压,把quartz-2.2.3-distribution\quartz-2.2.3\lib目录下jar包添加到工程中即可,如果使用maven,添加一下依赖:

  <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz</artifactId>
    <version>2.2.1</version>
  </dependency>
  <dependency>
    <groupId>org.quartz-scheduler</groupId>
    <artifactId>quartz-jobs</artifactId>
    <version>2.2.1</version>
  </dependency> 

二、入门例子

先写一个类,MyJob.java,注意,这个类一定要是public的。

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import java.util.Date;

public  class MyJob implements Job {

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("My QuarTz Job");
        System.out.println("执行时间:"+new Date());
    }
}

再写一个QuartzTest.java,实现每天24:00执行MyJob中的任务:

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;
import java.util.Date;

public class QuartzTest{

    public static void main(String[] args) {
        //创建一个SchedulerFactory对象
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = null;

        try {
            //通过SchedulerFactory对象获取任务调度器
            scheduler = schedulerFactory.getScheduler();
            //创建一个job
            JobDetail job = JobBuilder.newJob(MyJob.class)
                                 .withIdentity("job1", "group1")
                                 .build();
            //定义触发器,也就是执行job的规则
            Trigger trigger=TriggerBuilder.newTrigger()
                    .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?"))
                    .build();
            //把job和触发器注册到调度器中
            scheduler.scheduleJob(job,trigger);
            //启动调度器
            scheduler.start();
        } catch (SchedulerException e) {
            e.printStackTrace();
        }

    }
}

执行QuartzTest类中的main方法,等到00:00的时候就会执行MyJob中的任务:

My Quartz Job
执行时间:Tue Aug 01 00:00:00 CST 2017

三、核心概念

先扫盲单词,查词典:

Quartz:石英,一种矿石

有一种手表叫石英手表:

我一直没想明白为什么定时任务调度框架以一块石头命名,如果和石英手表联系起来,和精准的时间联系起来,似乎有点道理了。我猜测开发这个框架的程序员给框架命名的时候刚好戴了一块石英手表,就以Quartz命名了。好了,这段纯属瞎扯,为什么命名为Quartz有待考证(有知道的请告知),脑洞时间结束。

3.1 Scheduler(调度器)

schedule:名词,任务,时刻表

scheduler:名词,程序调度器

如果想通过Quartz创建定时任务,那么首先创建一个用于任务调度的调度器,也就是Scheduler的对象。Scheduler对象要通过调度器工厂类SchedulerFactory创建。

SchedulerFactory schedulerFactory = new StdSchedulerFactory();
Scheduler scheduler = schedulerFactory.getScheduler();

3.2 Job(任务)

job就是我们要执行的任务,也就是MyJob中的代码。一个Java类,先实现Job接口,再复写父类的execute()方法,然后创建JobDetail对象,传通过反射机制(也就是MyJob.class)实现JobDetail对象。

JobDetail job = JobBuilder.newJob(MyJob.class)
                                 .withIdentity("job1", "group1")
                                 .build();

3.3 Trigger(触发器)

查单词:

tiger:老虎

trigger:枪的扳机、触发器

既然是定时任务,调度器也好了,任务也有了,什么时候执行任务就是在Trigger中配置的,每天的00:00扣动扳机:

Trigger trigger=TriggerBuilder.newTrigger()
                    .withSchedule(CronScheduleBuilder.cronSchedule("0 0 0 * * ?"))

把Job和Trigger装载到Scheduler中:


 scheduler.scheduleJob(job,trigger);

启动:

 scheduler.start();

等到00:00,砰,不是枪声,而是Quartz的定时任务执行了。

继续学习之后再补充。。。。

java作业调度框架Quartz的更多相关文章

  1. 作业调度框架Quartz.NET-现学现用-01-快速入门

    原文:作业调度框架Quartz.NET-现学现用-01-快速入门 前言 你需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行.一个自动执行而无须干预的任务在执 ...

  2. 作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书

    原文:作业调度框架Quartz.NET-现学现用-01-快速入门 - 简书 前言 你需要应用执行一个任务吗?这个任务每天或每周星期二晚上11:30,或许仅仅每个月的最后一天执行.一个自动执行而无须干预 ...

  3. 作业调度框架Quartz.NET | 大专栏

    原文:作业调度框架Quartz.NET | 大专栏 作业调度框架Quartz.NET 发表于 2019-09-28 |  分类于 前端 |  没有评论 前言 任务调度系统并不是完美的,它会出现任务执行 ...

  4. 作业调度框架Quartz.NET-现学现用-02-任务监听

    原文:作业调度框架Quartz.NET-现学现用-02-任务监听 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. Quar ...

  5. 作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书

    原文:作业调度框架Quartz.NET-现学现用-02-任务监听 - 简书 前言 任务调度系统并不是完美的,它会出现任务执行失败的情况.如果你需要处理任务失败后的逻辑,希望这篇笔记可以为你提供些帮助. ...

  6. Java任务调度框架Quartz入门

    Quartz[kwɔːts]:石英,其框架和名字一样简单朴素又不失魅力,在Java程序界,Quartz大名鼎鼎,很多Java应用几乎都集成或构建了一个定时任务调度系统,Quartz是一个定时任务调度框 ...

  7. Java任务调度框架Quartz教程

    一.什么是quartz作业调度? Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度. ...

  8. 作业调度框架 Quartz.NET 2.0 StepByStep

    注:目前网上诸多介绍Quartz.net的文章,甚至Quartz.net官网上的Tutorial都是1.0版本的,而这个项目在2.0版本对项目进行了比较大规模的修改,使得原有的很多例子都不能运行,故写 ...

  9. .Net平台开源作业调度框架Quartz.Net

    Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...

随机推荐

  1. 20145335《java程序设计》第三次实验报告

    20145335郝昊<java程序设计>第三次实验报告 实验目的与要求 以结对编程的方式编写一个软件,Blog中要给出结对同学的Blog网址,可以拍照展现结对编程 情况,可以参考一下其他学 ...

  2. 都能看懂的嵌入式linux/android alsa_aplay alsa_amixer命令行用法

    前几天在嵌入式linux上用到alsa command,网上查的资料多不给力,只有动手一点点查,终于可以用了,将这个使用方法告诉大家,以免大家少走弯路. 0.先查看系统支持哪几个alsa cmd: l ...

  3. 计算java对象的内存占用

    代码引用自:https://blog.csdn.net/antony9118/article/details/54317637  感谢博主分享: import java.util.ArrayList; ...

  4. angular $q的学习笔记转帖

    http://blog.segmentfault.com/bornkiller/1190000000402555 angular $q的一个不错的学习笔记

  5. 1029: [JSOI2007]建筑抢修 贪心

    https://www.lydsy.com/JudgeOnline/problem.php?id=1029 题意:n个建筑,每个有修复时间和爆炸时间,没有在爆炸时间内修复就会爆炸,问最多能修复的建筑 ...

  6. hihocoder1457

    http://hihocoder.com/problemset/problem/1457 找不重复子串的和 topo序搞一搞,用父亲更新儿子节点的val,记得乘上节点数 //#pragma comme ...

  7. 5.彻底理解volatile

    1. volatile简介 在上一篇文章中我们深入理解了java关键字synchronized,我们知道在java中还有一大神器就是关键volatile,可以说是和synchronized各领风骚,其 ...

  8. UVA-1619 Feel Good (单调队列)

    题目大意:给一个非负整数序列,求出一个使得区间和乘以区间最小值最大的区间. 题目分析:单调队列.维护两个数组,l[i]表示以a[i]为最小值的左半区间的最左边端点,r[i]表示以a[i]为最小值的右半 ...

  9. IOS-CALayer(图层)

    BWLayer.m // // BWLayer.m // IOS_0222_CALayer // // Created by ma c on 16/2/23. // Copyright © 2016年 ...

  10. js 滚到页面顶部

    一.滚到顶部,且滚动中,用户滚动鼠标无效 <style> .div1, .div2, .div3, .div4 { height: 400px; width: 400px; } .div1 ...