Quartz 定时任务 基础
1.Job
(2).job定义
实现业务逻辑的任务接口
job接口非常容易实现,只有一个execute方法,类似TimerTask的run方法,在里面编写业务逻辑
源码
(2).Job实例在Quartz中的声明周期
每次调度器执行job时,他在调用execute方法前会创建一个新的Job实例
当调度完成后,关联的Job对象会被释放,释放的实例会被垃圾回收机制回收
2.JobDetail
JobDetail为Job实例提供了许多设置属性,以及JobDataMap成员变量属性,他用来存储特定job实例的状态信息,调度器需要借助JobDetail对象来添加Job实例
(1).重要属性
name:任务的名称
group:任务的组,默认值DEFAULT
jobClass:任务的实现类
JobDataMap:传参
3.JobExecutionContext
(1)JobExecutionContext是什么
当Scheduler调用一个Job,就会将JobExecutionContext传递给Job的execute()方法;
Job能通过JobExecutionContext对象访问到Quartz运行时候的环境以及Job本身的明细参数
4.JobDataMap
在进行任务调度时JobDataMap存储在JobExecutionContext中,获取非常方便
JobDataMap可以用来装在任何可序列化的数据对象当Job实例对象被执行的时候这些参数对象会传递给他
JobDataMap实现JDK的Map接口,并且添加了一些非常方便的方法用来存取基本数据类型
获取JobDataMap的两种方式
从Map中直接获取
第二种方式获取(job实现类中添加setter方法对应jobDataMap的键值-->Quartz框架默认的JobFactory实现类在初始化Job实例对象会制动的调用这些setter方法)
5 .Trigger
什么是Trigger
Quartz中的触发器,用来告诉调度程序作业什么时候触发。即Trigger对象是用来触发执行job的
触发器属性
JobKey:表示Job实例的表示,触发器被触发时,该指定的Job实例会执行
StartTime:表示触发器的时间首次被触发的事件。他的值的类型是Java.util.Data。
EndTime:指定触发器的不再被触发的时间。他的类型是Java.util.Data。
SimpleTrigger
作用
在一个指定时间段内执行一次作业任务或是在指定的时间间隔内多次执行作业任务
注意
重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITELY常量值
重复执行间隔必须为0或长整数
一旦被指定了endTime参数,那么他会覆盖重复次数参数的效果
CronTrigger
作用
基于日历的作业调度器,不是像SimpleTrigger那样精确指定间隔时间,比SimpleTrigger更常用
Cron表达式
用于配置C荣Trigger实例
是由7个子表达式组成的字符串,描述了时间表的详细信息
格式:[秒] [分] [小时] [日] [月] [ 周] [年]()(连接有空格)
需要的时候可以在百度上搜索cron表达式在线生成器
6.Schedubler
Schedubler-工厂模式
所有的Schedbuler实例应该由SchedulerFactory来创建
实现类
StdSchedulerFactory
DirectSchedulerFactory
StdSchedulerFactory
使用一组参数(java.util.Properties)来创建和初始化Quartz调度器
配置参数一般存储在Quartz.properties中
调用getScheduler方法就能创建和初始化调度器对象
Scheduler主要函数
Date scheduleJob(JobDetail jobDetail,Trigger trigger)(返回的是最近要执行的时间)
void start()
void standby()(暂停执行)
void shutdown()(停止)(如果传入参数是true 表示等待所有正在执行的job完成后在关闭,如果是false表示直接关闭)
7.quartz.propeties
配置文件加载顺序:工程的配置-->jar配置
组成部分
调度器属性:
org.quartz.scheduler.instanceName属性用来区分特定的调度器实例,可以按照功能用途来给调度器起名
org.quartz.scheduler.instanceId属性和前者一样,也允许任何字符串,但这个值必须是所在调度器实例中是唯一的尤其是在一个集群中作为唯一key。如果你想Quartz帮你生成这个值,也可以设置为AUTO
线程池属性:
threadCount(设置线程池数量最小1)
threadPriority(工作线程的优先级,最大10,最小1,默认5,只能是整数)
org.quartz.threadPool.class
作业存储设置:
描述了在调度器实例的生命周期中,job和trigger信息是如何被存储的。
插件配置:
满足特定需求要用到Quartz插件的配置