java 任务 分发器_Java定时任务调度工具详解Quartz(一)

本文介绍了Java定时任务调度工具Quartz的特点,如强大的调度功能、持久化机制、分布式与集群能力。Quartz使用设计模式如Builder、Factory,核心概念包括Scheduler、Job、Trigger。文章讲解了JobDetail、JobExecutionContext、JobDataMap、SimpleTrigger和CronTrigger的用法,特别是CronTrigger通过Cron表达式实现日历式的任务调度。此外,还提及了Quartz的配置文件quartz.properties及其加载规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础知识:

一:Quartz具有的特点:

(1)具有强大的调度功能,很容易与spring集成,形成灵活可配置的调度功能。

(2)调度环境的持久化机制:可以保存并恢复调度现场,即使系统因为故障关闭,任务调度现场的数据并不会丢失;timer没有这些特点。

(3)灵活的应用方式:可以灵活的定义触发器调度的时间表,并可以对触发器与任务进行关联映射;

(4)分布式与集群能力。

二:设计模式

设计模式:Builder模式、Factory模式、组件模式、链式写法

核心概念:调度器(Scheduler)、任务(Job)、触发器(Trigger)

(1)Job

实质:是一个接口,里面有一个execute方法,用于编写任务业务逻辑

生命周期:当调度器需要执行job时创建实例,调用完成后释放job实例

(2)JobDetail

概念:描述Job实例的详细信息

属性:

(1)name:job名称

(2)group:job组,默认值为default

(3)jobclass:job实现类

(4)jobDataMap:存储Job实例的状态信息,调度器使用这些信息添加Job实例

(3)JobExecutionContext

概念:Job能通过JobExecutionContext访问Quartz运行环境以及Job的明细数据,当Scheduler调用Job时能将数据传递给execute()方法

(4)JobDataMap

概念:是一个JDK中Map接口实例,在任务调度时存在于JobExecutionContext中,可将参数对象传递给在运行的Job实例;而且,它自身有方便的方法可存取基本数据类型

获取方式:从JobDataMap中直接获取、在Job实现类中添加setter方法对应JobDataMap的键值

(5)Trigger属性:

(1)Jobkey:Job实例标识,触发器被触发时,job实例随之执行

(2)startTime:首次被触发时间

(3)endTime:不再被触发的时间

(6)SimpleTrigger

概念:在指定时间段内只执行一次任务或者在指定时间间隔内多次执行任务

(7)CronTrigger(更常用,可以代替SimpleTrigger)

概念:基于日历的作业调度器,指定哪一个月哪一天什么时间执行

使用Corn表达式 可以根据日历 来指定执行时间。

Cron表达式:

用于配置CronTrigger实例,是由7个子表达式组成的字符串,描述了时间表的详细信息,格式:[秒] [分] [小时] [日] [月] [周] [年]

8f93fb3ac3808130050f76813e4aa755.png

7d3d052f5df5ea8dba2a3ec1fdb1436b.png

说明:(1)第二个例子中,0/5是指每隔5分钟触发

(2)第四个例子中,6#3是指第三周的星期五(6表示星期五,因为国外每周是从星期日开始)

(3)第五个例子中,6L是指最后一周的星期五(6表示星期五,因为国外每周是从星期日开始)

8531554b1fb048433eb5484fb7a43a2d.png

864797564d064452bd9a4567ec7a92f2.png

补充:如何定义每月最后一个工作日呢?

答案:0 0 0 LW * ?

也可以使用“在线Cron表达式生成器”,进行生成表达式

5c19c9cded684511ff82dc5f939b4c1d.png

2c5310cc950fa6444a1923bf96ef5d9d.png

注意:job 和 Trigger 是一对多的关系

52f66e80f289868f3149477e58995435.png

a97e2b5b6085a7688baa5888a8fe1012.png

其中:

(1)scheduleJob(JobDetail jobDetail,Trigger trigger)是指返回最近一次执行的时间

(2)standby()表示暂时将scheduler挂起,可以后期再次开启,即调用start()进行开启。

(3)shutdown 的用法:关闭scheduler调度器,后期不可以被重启。

shutdown(true)表示等待所有正在执行的job执行完毕之后,再关闭scheduler

shutdown(false)即shutdown()表示直接关闭scheduler

三:quartz.properties配置文件的引入:

首先quartz.jar包的org.quartz目录下有一个默认的quartz.properties,如果当前项目下没有创建quartz.properties文件,系统会默认执行quartz.jar包下的该配置文件。而且,当前项目下的quartz.properties文件优先于quartz.jar包下的quartz.properties文件。

如何测试呢?

方案:可以任意修改项目下创建的quartz.properties文件内容,不符合要求的就会有报错信息。

6fbc6aa8305b2899f869c220c0d44eb6.png

96183bc43be3819c6efdad0d827dd3ac.png

6f0b1891353ba355aa662a4408e09179.png

关于代码的详细信息,请见下一章节(Java定时任务调度工具详解Quartz(二))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值