在软件开发中,很多时候需要在特定时间的时间执行某些操作,比如每天的凌晨三点、每周的周日、每个月的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. idea+maven本地仓库更新问题

    在POM文件中将dependecy填好,.m2/repository/文件夹下也有相应的包下载了.但idea External Libraries就是引用不到这个包. 怎么mvn clean inst ...

  2. 20145314郑凯杰《信息安全系统设计基础》第9周学习总结 PART B

    20145314郑凯杰<信息安全系统设计基础>第9周学习总结 PART B 明确教材学习目标 注意每个系统调用的参数.返回值,会查帮助文档 阅读教材,完成课后练习(书中有参考答案),考核: ...

  3. git的应用

    对git的应用 (终于第一次用会git) 根据胡东晖同学的博客(使用git推送代码到开源中国以及IDEA环境下使用git)与热心指导,自己跟着做了,虽然途中出了很多很多问题,但是好在最后还是成功了!! ...

  4. 20145329 《Java程序设计》第七周学习总结

    教材学习内容总结 +JDK出现之前就已经存在的java.util.Date与java.util.Calendar等API +如果想取得系统时间,方法之一是使用System.currentTimeMil ...

  5. Win7下硬盘安装fedora17

    Win7下硬盘安装fedora17 这几天经过很多次的百度和实验,终于成功的在我的x64机子上装上了fedora17,以此分享给大家,希望能给大家帮助. 一.准备工作: 1.工具,因为我们电脑上大部分 ...

  6. LeetCode——Nth Digit

    Question Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... ...

  7. 线程实现Runnable接口比继承Thread的优势

    1.适合多个相同程序代码的线程去处理同一资源,把虚拟CPU(线程)同程序的代码.数据有效分离,较好地体现了面向对象的设计思想.2.可以避免由于java单继承特性带来的局限.3.增强了程序的健壮性,代码 ...

  8. TP5接受Vue跨域请求

    <?php /** * Created by PhpStorm. * User: qianglong * Date: 2018/1/15 * Time: 17:56 */ namespace a ...

  9. 用 SqlConnectionStringBuilder 来写连接字符串,向连接字符串添加设置

    正常情况下写的连接字符串: connStr = "Data Source=127.0.0.1;DataBase=Hydor;UID=***;PWD=***;Pooling=true;Min ...

  10. 综合一句话Shell破解

    之前我在论坛发过了一句话的破解工具. 所以决定还是在基础上在改改,符合某些人的利用. 上一版只支持HTTPS/ASPX,这次改进后,也算是最后一版. 支持:PHP/HTTP/HTTPSASPX/HTT ...