java作业调度框架Quartz

简介: 在软件开发中,很多时候需要在特定时间的时间执行某些操作,比如每天的凌晨三点、每周的周日、每个月的15号,Apache Quartz就是一个开源的作业调度框架,可以让计划的程序任务一个预定义的日期和时间运行。

在软件开发中,很多时候需要在特定时间的时间执行某些操作,比如每天的凌晨三点、每周的周日、每个月的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的定时任务执行了。

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

目录
相关文章
|
1月前
|
Java 容器
java集合框架复习----(1)
这篇文章提供了Java集合框架的复习资料,包括集合的概念、Collection接口的使用,以及如何通过代码示例演示集合的操作,如增加、删除元素,以及遍历集合元素。
java集合框架复习----(1)
|
1月前
|
安全 前端开发 Java
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择
随着企业应用复杂度提升,Java Spring框架以其强大与灵活特性简化开发流程,成为构建高效、可维护应用的理想选择。依赖注入使对象管理交由Spring容器处理,实现低耦合高内聚;AOP则分离横切关注点如事务管理,增强代码模块化。Spring还提供MVC、Data、Security等模块满足多样需求,并通过Spring Boot简化配置与部署,加速微服务架构构建。掌握这些核心概念与工具,开发者能更从容应对挑战,打造卓越应用。
33 1
|
1月前
|
存储 安全 Java
java集合框架复习----(2)List
这篇文章是关于Java集合框架中List集合的详细复习,包括List的特点、常用方法、迭代器的使用,以及ArrayList、Vector和LinkedList三种实现类的比较和泛型在Java中的使用示例。
java集合框架复习----(2)List
|
1月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
17天前
|
Java 数据库连接 Apache
Java进阶-主流框架总结与详解
这些仅仅是 Java 众多框架中的一部分。每个框架都有其特定的用途和优势,了解并熟练运用这些框架,对于每一位 Java 开发者来说都至关重要。同时,选择合适框架的关键在于理解框架的设计哲学、核心功能及其在项目中的应用场景。随着技术的不断进步,这些框架也在不断更新和迭代以适应新的开发者需求。
33 1
|
1月前
|
存储 算法 Java
14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)
14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)
37 2
14 Java集合(集合框架+泛型+ArrayList类+LinkedList类+Vector类+HashSet类等)
|
20天前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。
|
21天前
|
存储 算法 Java
Java中的集合框架深度解析云上守护:云计算与网络安全的协同进化
【8月更文挑战第29天】在Java的世界中,集合框架是数据结构的代言人。它不仅让数据存储变得优雅而高效,还为程序员提供了一套丰富的工具箱。本文将带你深入理解集合框架的设计哲学,探索其背后的原理,并分享一些实用的使用技巧。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往高效编程的大门。
|
1月前
|
存储 Java
java集合框架复习----(3)Set
这篇文章详细介绍了Java集合框架中的Set集合,包括HashSet和TreeSet的特点、实现原理和使用示例,展示了Set集合的无序性、元素唯一性以及如何通过自定义比较器实现元素的排序。
|
1月前
|
安全 前端开发 Java
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例
在Web安全上下文中,源(Origin)是指一个URL的协议、域名和端口号的组合。这三个部分共同定义了资源的来源,浏览器会根据这些信息来判断两个资源是否属于同一源。例如,https://www.example.com:443和http://www.example.com虽然域名相同,但由于协议和端口号不同,它们被视为不同的源。同源(Same-Origin)是指两个URL的协议、域名和端口号完全相同。只有当这些条件都满足时,浏览器才认为这两个资源来自同一源,从而允许它们之间的交互操作。
Web端系统开发解决跨域问题——以Java SpringBoot框架配置Cors为例