-
SimpleTrigger的作用:在指定时间执行且仅执行一次任务,或者是在指定时间间隔内多次执行任务。
举例1:当前时间4秒后,执行定时任务并仅执行一次。
举例2:每隔2秒钟执行一次定时任务,通过withRepeatCount方法实现重复执行定时任务,如果withRepeatCount参数是整数,代表第一次执行之后执行定时任务的次数,如图。
注意:endAt方法优先级大于withRepeatCount方法优先级,即使次数还没执行完,到指定时间也会结束。
查看全部 -
Trigger定义:Quartz的触发器,用来定义调度程序任务执行的时间,也就是触发执行Job的时间。
Quartz框架中的Trigger架构:如图。
1、Trigger是Builder设计模式创建的。
2、Trigger实现类很多,这里常用CronTriggerImpl和SimpleTriggerImpl这两个Trigger实现类。
触发器通用属性(所有实现类拥有的属性)
JobKey:Job实例的标识,触发器触发调度工具时,该Job对应的相应任务就会执行(通过JobKey可以获取和Trigger绑定的JobDetail的一些信息)。
StartTime:触发器的时间表,首次被触发的时间,类型为Java.uitl.Date(可以在调度器中存储一个触发器,当时间到了触发的时间调度器就会调用Job的相应任务)。
EndTime:触发器不再被触发的时间,它的类型为Java.uitl.Date,超过这个时间,触发器就会执行了。
举例:如图,演示startTime、endTime、JobKey的使用。
1、通过Date获取3秒后的时间。
2、触发器执行指定触发时间的方法(startAt()、endAt())
3、通过Trigger获取JobKey,并且通过jobKey获取与Trigger绑定的Job的JobDetail的相关信息。
4、通过Trigger获取startTime和endTime的信息。
查看全部 -
举例:如图。
知识点1:可以通过getMergedJobDataMap()获取JobDetail和Trigger合并的JobDataMap。但这里需要注意一点是如果Trigger和JobDetail的key相同,那么Trigger会覆盖JobDetail。
第二种获取传入JobExecuteContext的参数:更直接,更简洁。通过setter方法直接对Job里对应key值的成员变量赋值。
举例:如图。
知识点1:通过在实现Job接口的实现类中,定义成员变量并提供setter方法,前提成员变量的类型要和传入的value值类型相同,名称要和key的名称相同。该种方式就可以不使用JobDataMap了。
查看全部 -
JobExecutionContext:它是位于Job接口的execute方法的参数位置。由于每个业务逻辑Job实例需要的参数不同,Quartz没办法提供带有参数的构造函数。去给Job实例初始化参数。因此Quartz在每次执行Job时,都需要重新创建一个Job实例。并通过newInstance的反射机制调用无参构造函数,依据Job实现类的描述来实例化Job。所以想进行传参就需要使用JobExecutionContext。(类似于Servlet访问ServletContext那样)通过JobExecutionContext,Job可以访问到所处环境的所有信息(包括注射到Scheduler上与该Job相关的JobDetail和Trigger)。
JobDataMap:它支持键值对的形式,将自定义参数传入JobDataMap。
获取JobDataMap:
举例:如图。
知识点1:通过在创建JobDetail或者Trigger时,通过usingJobData(参数1,参数2)为JobExecuteContext参数传入参数,如果传入多个参数,可以通过定义多个usingJobData方法。
知识点2:可以通过JobKey或者TriggerKey实例的getName或者getGroup方法获取JobDetail或者Trigger的唯一标识和组。而JobKey或者TriggerKey是通过JobExecuteContext参数的getJobDetail.getKey()或者getTriiger().getKey()方法获取的。
知识点3:可以通过JobDataMap获取传入的参数,也就是通过传入的key获取value,而JobDataMap是通过JobExecuteContext实例的getJobDetail.getJobDataMap或者getTrigger.getJobDataMap获取的。之后就可以通过JobDataMap实例的getKey("key")获取值。
查看全部 -
Job接口:实现业务逻辑的任务接口,实现该接口需要实现execute方法,该方法类似于TimerTask的run方法。JobExecutionContext参数是Job执行的上下文,其中在该参数中有一个JobDataMap,它包含了输入的参数。
注意:execute方法声明抛出了一个异常,如果任务执行失败,我们可以通过捕获该异常来处理。避免了Timer的全崩式失败。
Job在Quartz的生命周期:每次Scheduler执行Job时,它在调用execute方法前会根据JobDetail提供的类型创建一个Job实例。当该任务执行完毕后,会丢弃该Job实例,并且释放的实例会被垃圾回收机制回收。
JobDetail接口:JobDetail为Job实例提供了许多设置属性,以及JobDataMap成员变量属性,它用来存储特定Job实例的状态信息,Scheduler需要借助JobDetail对象来添加Job实例。
Job的重要属性:
name:任务的名称,它在JobDetail中是必须项。
group:任务所在组,默认值是大写的DEFAULT,它也是必须项。
jobClass:JobDetail传入任务的类类型,它也是必须项。
jobDataMap:它用来传参的作用。
使用场景:例如,输出日志,输出执行的任务所在路径就可以通过getClass()。
查看全部 -
举例:任务每隔两秒钟打印一次Hello World。
首先,需要到maven中央仓库复制坐标到pom文件中,如图。
——总结——
JobDetail:
通过它可以获取Job执行时的一些信息。JobDetail它是通过Builder设计模式创建的。
Trigger:
通过它可以触发Job何时执行。它也是通过Builder设计模式创建的。立即执行是通过startNow方法。时间间隔通过withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(2)。重复执行repeatForever()。
Scheduler:它是通过Factory设计模式创建的。
查看全部 -
Quartz简介:OpenSymphony提供的强大的开源任务调度框架(官网:http://www.quartz-scheduler.org/),它是基于Java实现的。
Quartz特点:
1、强大的调度任务框架,Spring默认的调度框架,容易与Spring集成,实现灵活、可配置的调度功能。
2、提供了调度运行环境的持久化机制,可以保存并恢复调度现场,即使系统因故障关闭,任务调度现场数据并不会丢失(Timer就不能做到这一点,一旦失败,接下来的任务就都不能执行了,并且一切的执行信息都会丢失)。
3、允许灵活的定义调用触发器的时间表,并可以对触发器和任务进行关联映射,它提供了主键式的监听器和各种插件,线程池的功能,支持任务和调度的多种组合方式,支持调度数据的多种存储方式。
4、分布式和存储能力。
Quartz用到的设计模式:
1、Builder模式:例如Job、Trigger,它们都是通过Builder创建的。
2、Factory模式:例如调度器是通过它创建的。
3、组建模式:可以让每一个组件可以插拔,并且组件之间的耦合度是很低的,易于扩展,可以自行定义一些组件。
4、链式写法
Quartz的核心概念:
1、调度器:定期定时定频率的调度执行任务。
2、任务:业务逻辑。
3、触发器:让行为生效的时间。
Quartz的体系结构:
1、JobDetail:任务的实现细节。
2、Trigger:触发器,决定任务什么时候被调用,它又分为SimpleTrigger、CronTrigger,SimpleTrigger它类似于Timer,实现时间上的一些操作。CronTrigger实现较为复杂的业务逻辑,例如每周三执行任务。
3、scheduler:调度器,定时定频率调用定时任务JobDetail,并且通过它将JobDetail和Trigger绑定在一起。
Quartz的重要组成:
1、Job:区别于JobDetail,它是一个接口,并且只有一个方法,可以通过实现该接口,实现定时任务,它就相当于TimerTask的run方法,只不过是该方法有一个参数。
查看全部 -
Scheduler
查看全部 -
Cron表达式及案例<br/><p><img src="http://img1.sycdn.imooc.com//5ded090f0001429105000280.jpg" alt="http://img1.sycdn.imooc.com//5ded090f0001429111900666.jpg"/></p><p><img src="http://img1.sycdn.imooc.com//5ded090f0001a42105000284.jpg" alt="http://img1.sycdn.imooc.com//5ded090f0001a42111930676.jpg"/></p>查看全部
-
通配符说明<br/><p ><img src="http://img1.sycdn.imooc.com//5ded08670001e71305000243.jpg" alt="http://img1.sycdn.imooc.com//5ded08670001e71312510607.jpg"/></p>查看全部
-
Job的定义:实现业务逻辑的任务接口。
浅谈Job:Job接口非常容易实现,只有一个execute方法,类似TimerTask的run方法,在里面编写业务逻辑。
package org.quartz;
public interface Job{
public void execute(JobExecutionContext context)throws
JobExecutionException;
}
Job实例在Quartz中的生命周期
每次调度器执行job时,它在调用execute方法钱会创建一个新的job实例。
当调用完成后,关联的job对象实例会被释放,释放的实例会被垃圾回收机制回收。
浅谈JobDetail
JobDetail为Job实例提供了许多设置属性,以及JobDataMap成员变量属性,它用来存储特定Job实例的状态信息,调度器需要借助JobDetail对象来添加Job实例。
查看全部 -
Quartz体系机构:
查看全部 -
链式写法查看全部
-
定时任务工具所需
调度器scheduler 老板
触发器trigger 下班
任务jobDetail 发工资
总结:下班老板发工资
查看全部 -
特点:强大的调度功能,灵活的应用方式 ,分布式和集群能力
查看全部
举报