美文网首页
Quartz入门

Quartz入门

作者: 寻找大海的鱼 | 来源:发表于2020-05-05 10:37 被阅读0次

    一. 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依赖

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

    八.入门案例

    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入门

          本文链接:https://www.haomeiwen.com/subject/ttdyghtx.html