定时任务组件Quartz
【目标】
定时任务组件Quartz
· 清除文件上传所产生的垃圾图片
【路径】
1:Quartz介绍
· 掌握场景(定时任务)
2:Quartz入门案例
· spring整合Quartz(spring中配置)
3:cron表达式(七子表达式)秒分时日月周年
4:cron表达式在线生成器
【讲解】
Quartz介绍
Quartz是Job scheduling(作业调度)领域的一个开源项目,Quartz既可以单独使用也可以跟spring框架整合使用,在实际开发中一般会使用后者。使用Quartz可以开发一个或者多个定时任务,每个定时任务可以单独指定执行的时间,例如每隔1小时执行一次、每个月第一天上午10点执行一次、每个月最后一天下午5点执行一次等。
官网:http://www.quartz-scheduler.org/
使用教程:https://www.w3cschool.cn/quartz_doc/
简单来说,就是可以帮助我们设置一个有规律的或者在某个具体的时间点干点想干的事的一个开源框架。
在使用Scheduler之前,需要实例化 scheduler实例化后,可以启动(start)、暂停(stand-by)、停止(shutdown)。
Quartz API的关键接口是:
· Scheduler:任务调度器,所有的任务都是从这里开始。
· Trigger:触发器,定义任务执行方式、间隔。
· JobDetail & Job : 定义任务具体执行的逻辑。
Scheduler的生命期,从SchedulerFactory创建它时开始,到Scheduler调用shutdown()方法时结束;Scheduler被创建后,可以增加、删除和列举Job和Trigger,以及执行其它与调度相关的操作(如暂停Trigger)。但是,Scheduler只有在调用start()方法后,才会真正地触发trigger(即执行job)
创建项目 quartz_demo 导入 maven 坐标:
Quartz 入门案例
① 创建QuartzTest
② 创建HelloQuartz
执行程序
Spring 整合 Quartz
【路径】
1:创建maven工程quartz_demo,打包方式为war,导入jar包
2:自定义一个Job
3:提供Spring配置文件applicationContext-jobs.xml,配置自定义Job、任务描述、触发器、调度工厂等
4:web.xml中定义
5:启动tomcat完成测试
【讲解】
本案例基于Quartz和spring整合的方式使用。具体步骤:
(1)创建maven工程quartz-demo,打包方式为war,导入Quartz和spring相关坐标,pom.xml文件如下
导入jar包
(2)自定义一个Job
(3)提供Spring配置文件applicationContext-jobs.xml,配置自定义Job、任务描述、触发器、调度工厂等
【路径】
1:创建JobDetail对象,作用是负责通过反射调用指定的Job,注入目标对象,注入目标方法
2:注册一个触发器,指定任务触发的时间
3:注册一个统一的调度工厂,通过这个调度工厂调度任务
(4)web.xml中定义
启动web,自动加载spring容器。
执行Tomcat观察控制台,可以发现每隔10秒会输出一次,说明每隔10秒自定义Job被调用一次。
4.3. cron表达式(七子表达式)
上面的入门案例中我们指定了一个表达式:0/10 * * * * ?
这种表达式称为cron表达式,通过cron表达式可以灵活的定义出符合要求的程序执行的时间。本小节我们就来学习一下cron表达式的使用方法。如下图:
cron表达式分为七个域,之间使用空格分隔。其中最后一个域(年)可以为空。每个域都有自己允许的值和一些特殊字符构成。使用这些特殊字符可以使我们定义的表达式更加灵活。
下面是对这些特殊字符的介绍:
逗号(,):指定一个值列表,例如使用在月域上1,4,5,7表示1月、4月、5月和7月
横杠(-):指定一个范围,例如在时域上3-6表示3点到6点(即3点、4点、5点、6点)
星号(*):表示这个域上包含所有合法的值。例如,在月份域上使用星号意味着每个月都会触发
斜线(/):表示递增,例如使用在秒域上0/15表示每15秒
问号(?):只能用在日和周域上,但是不能在这两个域上同时使用。表示不指定,例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用 *,如果使用 * 表示不管星期几都会触发,实际上并不是这样。
井号(#):只能使用在周域上,用于指定月份中的第几周的哪一天,例如6#3,意思是某月的第三个周五 (6=星期五,3意味着月份中的第三周)
L:某域上允许的最后一个值。只能使用在日和周域上。当用在日域上,表示的是在月域上指定的月份的最后一天。用于周域上时,表示周的最后一天,就是星期六
W:W 字符代表着工作日 (星期一到星期五),只能用在日域上,它用来指定离指定日的最近的一个工作日
4.3.1 常用表达式例子
4.4. cron表达式在线生成器
前面介绍了cron表达式,但是自己编写表达式还是有一些困难的,我们可以借助一些cron表达式在线生成器来根据我们的需求生成表达式即可。
http://cron.qqe2.com/
【小结】
1:Quart介绍
· 掌握场景(定时任务)
2:Quartz入门案例
· spring整合Quartz(spring中配置)
3:cron表达式
4:cron表达式在线生成器