quartz学习记录

一、quartz概念

quartz就是基于java开发的任务调度框架
官网地址

二、quartz的运行环境

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

三、quartz的设计模式

  • builder模式
  • Factory模式
  • 组件模式
  • 链式编程

四、quartz的核心概念

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

五、quartz的结构体系

在这里插入图片描述

  • start(start()):开始
  • stop(shutdown()):停止
  • pause:暂停
  • resume:恢复

六、quartz的几个常用API

以下是Quratz编程的几个重要接口,也是Quratz的重要组件

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

七、job与jobDetail的介绍

  • job:工作任务调度的接口,具体业务的任务类需要实现该接口。该接口中定义的execute方法,类似JDK提供的TimeTask类中的run方法。在该类中编写具体的业务逻辑。
  • job实例在Quartz中的生命周期:每次调度器执行job时,他在调用exceute方法前会创建一个新的job实例,当调用完成后,关联的job对象实例将会被释放,释放的实例会被垃圾回收机制回收。
  • jobDetail:jobDetail为job实例提供了许多设置属性,以及jobDetailMap成员变量属性,它用来存储特定job实例的状态信息,调度器需要借助jobDetail对象来添加job实例。
  • jobDetail重要属性:name,group,jobClass,jobDetailMap
System.out.println("名称:"+job.getKey().getName());
System.out.println("组的名称:"+job.getKey().getGroup());
System.out.println("任务类:"+job.getKey().getClass());

JobExecutionContext介绍

  • 当schescheduler调用一个job的时候,就会将JobExecutionContext传递给job的execute方法;
  • job能通过JobExecutionContext对象访问到quartz运行时候的环境以及job本身的明细数据。

。。。。、quartz的使用

maven远程仓库地址:https://mvnrepository.com

<dependency>
	<groupId>org.quartz-scheduler</groupId>
	<artifactId>quartz</artifactId>
	<version>2.3.1</version>
</dependency>
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

public class Myjob implements Job {
    //每次调用都会创建job实例
	public Myjob() {
        System.out.println("Myjob");
    }
    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        //输出当前时间
        Date date = new Date();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String format = simpleDateFormat.format(date);
        System.out.println("当前时间是:"+date);
    }
}
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class HelloSchedulerDemo {
    public static void main(String[] args) throws SchedulerException {
        //1.调度器scheduler
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        //2.任务实例
        JobDetail job = JobBuilder.newJob(Myjob.class)//创建job实例
                .withIdentity("job1", "group1")//参数1:任务名称 2:任务组的名称
                .build();
        //3.触发器Trigger
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("trigger1", "group1")//参数1:触发器名称 2:触发器组的名称
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5))//调度器类型
                .build();

        //4.关联触发器和任务
        scheduler.scheduleJob(job,trigger);

        //5.启动
        scheduler.start();
    }

结果:

Myjob
当前时间是:Sun Jul 12 17:12:13 CST 2020
Myjob
当前时间是:Sun Jul 12 17:12:18 CST 2020
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值