Quartz介绍

一、前言

几乎所有系统都需要定时任务,如果系统中定时任务比较少并且是单机环境的直接使用SpringTask即可,如果定时任务比较多且需要经常维护或者要部署在分布式环境中就要考虑使用Quartz或者xxl-job等开源框架,今天我们来了解一下Quartz的基本使用。

二、Quartz核心概念

Quartz是一款功能强大的任务调度库,它核心概念如下:

1、任务 Job

被调度的任务都要实现Job接口execute()方法。

2、触发器 Trigger

Trigger用于设置任务的执行时间,Quartz表达式就是配置在Trigger上。

3、调度器 Scheduler

任务调度器,它负责将Job与Trigger整合起来,然后根据Trigger设置的时间来执行Job,可以start、stop、pause、resume任务。

三、Quartz简单例子

1、导入依赖

注:quartz使用slf4j打印日志,需要引入logback等日志实现。

2、配置文件

quartz.properties

注:设置并行运行的线程数以及配置jobstore存储,有RAMJobStore和JDBCJobSTore两种方式,RAMJobStore当进程重启会丢失,JDBCJobSTore配置存在数据库不会丢失。

3、自定义任务

注:实现Job接口,编写任务代码

4、创建任务调度

控制台输出如下

注:以前AndroidStudio有控制台输出过滤功能,IDEA反而没有,可以安装Grep-Console插件。

四、代码中几个对象解释

1、JobDetail

用于定义任务的数据,Scheduler每次执行时会根据JobDetail创建一个新的Job实例,避免直接执行Job存在并发的问题。

2、JobExecutionContext

可以用来访问Quartz环境及Job本身明细数据。

传参数例子

调度类设置JobDataMap传给JobDetail,在任务类中通过JobExecutionContext获取传入的JobDataMap,也可以通过Trigger传给任务类。

3、Job的状态

每次Scheduler执行Job方法之前都会创建新的Job实例,如果想将数据保留以便下一个运行期,需要在任务类上加上注解PersistJobDataAfterExecution,这样每次执行JobDataMap的数据仍保留

4、常用的Trigger实现类

SimpleTrigger

用于在特定时间启动且以一个可能的间隔时间重复执行的Job任务而设计。

CronTrigger

基于Cron表达式来进行作业调度,Quartz的表达式和Crontab表达式还是有些差别的,在线表达式生成工具会分别提供Quartz和Crontab表达式的生成。

5、Other

Quartz相对 Linux的Crontab更强大,Crontab是进程调度而Quartz是线程调度,Quartz支持集群,另外Quartz还支持Listener便于进行Job的监控,因为数据可以存在DB便于做Job任务管理的可视化。Crontab的使用参见 《时区调整害了Crontab时区调整害了Crontab》。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值