Quartz入门

一. Quartz概念

Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合,也可以单独使用。
quartz是开源且具有丰富特性的“任务调度库”,能够集成任何的Java应用,小到独立的应用,大至电子商业系统,quartz能够创建亦简单亦复杂的调度,以执行上十,上百,甚至上万的任务,任务job被定义为标准的Java组件,能够执行任何你想要实现的功能。quartz调度框架包含许多企业级的特性,如JTA事物、集群的支持。
简而言之,quartz就是基于java实现的任务调度框架,用于执行你想要执行的任何任务
官网地址:http://www.quartz-scheduler.org/

二. Quartz运行环境

●Quartz可以运行嵌入在另一个独立式应用程序
●Quartz可以在应用程序服务器(或者servlet容器)内被实例化,并且参与事物
●Quartz可以作为一个独立的程序运行(其自己的Java虚拟机内),可以通过RMI使用。
●Quartz可以被实例化,作为独立的项目集群(负载均衡和故障转移功能),用于作业的执行。

三. Quartz设计模式

●Builder模式
●Factory模式
●组件模式
●链式编程

四.Quartz学习的核心概念

●Job任务
Job就是你想要实现的任务类,每一个job必须实现org.quartz.job接口,且只需实现接口定义的execute()方法。
●Trigger触发器
Trigger为你执行任务的触发器,比如你想每天定时3点发送一份统计邮件,Trigger将会设置3点进行执行该任务。Trigger主要包含两种SimpleTrigger和CronTrigger两种。
●Scheduler调度器
Scheduler为任务的调度器,它会将任务Job及触发器Trigger整合起来,负责基于Trigger设定的时间来执行Job

五.Quartz的体系结构

Quartz的体系结构.png

六.Quartz的几个常用API

以下是Quartz编程API几个重要的接口,也是Quartz的重要组件
●Scheduler 用于与调度程序交互的主程序接口
Scheduler调度程序-任务执行计划表,只有安排进执行计划的任务Job(通过scheduler.scheduleJob方法安排进执行计划),当它预先定义的执行时间到了的时候(任务触发Trigger),该任务才会执行。
●Job 我们预先定义的希望在未来时间被调度程序执行的任务类,我们可以自定义
●JobDetail 使用JobDetail来定义定时任务的实例,JobDetail实例是通过JobBuilder类创建的
●JobDataMap 可以包含不限量的(序列化的)数据对象,在job实例执行的时候,可以使用其中的数据;JobDataMap是Java Map接口的一个实现,额外增加了一些便于存取基本类型的数据的方法。
●Trigger触发器 Trigger对象是用来触发执行Job的,当调度一个Job时,我们实例一个触发器然后调整它的属性来满足job执行的条件。表明任务在什么时候会执行。定义了一个已经被安排的任务将会在什么时候执行的时间条件,比如每一秒执行一次
●JobBuilder 用于声明一个任务实例,也可以定义关于该任务的详情比如任务名,组名等,这个声明的实例将会作为一个实际执行的任务。
●TriggerBuilder 触发器创建器,用于创建触发器trigger实例
●JobListener、TriggerListener、SchedulerListener监听器,用于对组件的监听

七.Quartz的依赖

引入maven依赖


    org.quartz-scheduler
    quartz
    2.3.0

八.入门案例

Job任务类:PrintWordsJob

import org.quartz.*;

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

public class PrintWordsJob implements Job {
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String printTime = new SimpleDateFormat("yy-MM-dd HH-mm-ss").format(new Date());
        System.out.println("PrintWordsJob start at:" + printTime + ", prints: Hello Job-" + new Random().nextInt(100));
    }
}

启动类MyScheduler

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.util.concurrent.TimeUnit;

public class MyScheduler {
    public static void main(String[] args) throws SchedulerException, InterruptedException {
        // 1、创建调度器Scheduler
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        // 2、创建JobDetail实例,并与PrintWordsJob类绑定(Job执行内容)
        JobDetail jobDetail = JobBuilder.newJob(PrintWordsJob.class)
                .withIdentity("job1", "group1").build();
        // 3、构建Trigger实例,每隔1s执行一次
        Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "triggerGroup1")
                .startNow()//立即生效
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withIntervalInSeconds(1)//每隔1s执行一次
                        .repeatForever()).build();//一直执行

        //4、执行
        scheduler.scheduleJob(jobDetail, trigger);
        System.out.println("--------scheduler start ! ------------");
        scheduler.start();

        //睡眠
        TimeUnit.SECONDS.sleep(10);
        scheduler.shutdown();
        System.out.println("--------scheduler shutdown ! ------------");
    }
}

参考

https://blog.csdn.net/noaman_wgs/article/details/80984873
https://www.bilibili.com/video/BV19t41127de?p=9

你可能感兴趣的:(Quartz入门)