学习QuartZ(1)-怎么用?

本文深入探讨了Quartz框架下定时任务的使用方法,详细介绍了Job、JobDetail、Trigger和Scheduler的概念,并重点讲解了Cron表达式的应用。通过实例展示了如何设置定时任务,以及Cron表达式的灵活配置,旨在帮助开发者掌握Quartz定时任务的高效实现。

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

今天在做后台项目的时候,遇到了定时器定时任务,用的是quartz,以前没有做过类似的定时任务。

在使用的时候,总结了几个问题。

1. 怎么使用?

2. 使用的时候难点在哪?

3. 这个东西的框架结构是什么样的。

4. 这个东西是怎么工作的。

5. cron表达式多么优秀,怎么实现的。想法哪儿来的。

于是就恶补了一下。在quartz里有几个重要的概念。Job,JobDetail,Triger,Scheduler

Job: 具体的定时任务都需要实现Job接口。

JobDetail:QuartZ在执行任务的时候,通过反射来实例化Job,JobDetail用于封装Job的具体参数,包括组,名字等。

Triger:触发器,用来定义定时任务的执行规则,什么时候执行。

Scheduler: 用来维护定时任务注册的容器,同时还当定时任务触发条件满足时来执行任务。

在触发器中,有一个叫做CronTrigger.在Cron中有一个表达式,Cron表达式使用起来特别方便,Cron表达式来源于linux的Cron服务,linux可以通过Crond来做定时任务。可以通过注解的方式来设置定时任务。


Cron的表达式由6-7个以空格隔开的字符串组成,帮助文档中对其是这么定义的

------------------------------------------------------------------------------------------------

位置   |                    含义             |   允许的值          |   允许的特殊字符串 |

------------------------------------------------------------------------------------------------

1       |                    秒数              |   0-59                  |   , - * /                 |

—————————————————————————————---------

2       |                    分钟数           |   0-59                |   , - * /                 |

—————————————————————————————---------

3       |                    小时数           |   0-23                  |   , - * /                 |

—————————————————————————————---------

4       |              月份的第几天     |   1-31                   |   , - *  ?/  L W     |

—————————————————————————————---------

5       |              月                         |  1-12 JAN-DEC    |   , - *  /              |

—————————————————————————————---------

6       |              周的第几天           |  1-7 SUN-SAT    |   , - *  ?/  L  # |

—————————————————————————————---------

7       |              年(可选)                |  1970-2199      |   , - *  /               |

—————————————————————————————————

注意: 位置6(周的第几天)是按照美国人的记法,将SUN,星期天记为第一天。1.

在这里面一共存在8个特殊字符:

, : 用于间隔多个值,比如 MON,WED, SAT

-: 用于表示范围,如 1-3 表示 1,2,3。是闭区间。

*: 用于表示任何情况

/: 在/的左右分别存在一个值,比如 10/20,(如果是分钟数)则表示10,30 ,50, 第一个数是初始值(可以为*,表示任意),第一个数表示增量。

?: 在月份的第几天和周的几天使用,表示“不定”的意思。用来解决两个字段(位置4,位置6)同时设置时冲突,将一方置为不确定。

L: 是last的缩写,只能用在月的第几天或周的第几天(4,6)位置,使用存在几种情况,单独使用L表示最后一天。如果1L在位置6表示这个月的最后一个星期天。

当用在月上时,L-3表示从第三天到最后一天。 

W:  是weekday的缩写,用在位置4,后置使用,如4W则表示离4号最近的工作日,如果4号为星期六,则表示3号;如果4号为星期天,则表示5号。如果和L联用,LW则表示月的最后一个工作日。


最前面的代码的表达式的含义就能确定了,从任意分钟时间开始,每隔5分钟,在0秒时执行。


再看Scheduler, 作为定时任务的容器和执行器, 看看怎么获得Scheduler的;


通过工厂来获得Scheduler, 工厂是怎么创建Scheluder的,工厂通过scheduler仓库来存储scheduler实例。


SchedulerRepository就是一个简单的仓库,底层通过封装HashMap实现。

今天主要学习了quartz怎么使用的,什么是cron表达式,如何获得Scheduler的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值