Quartz 简介
Quartz是OpenSymphony在Job Scheduling 领域的又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。
Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或 EJBs。
Quartz核心概念
调度器(Scheduler)
Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。
任务(Job)
Job接口非常容易实现,只有一个execute方法,类似TimerTask的run方法,在里面编写业务逻辑
Job实例在Quartz中的生命周期
每次调度器(Scheduler)执行job时,它在调用execute方法前会创建一个新的job实例。
当调用完成后,关联的job对象实例会被释放,释放的实例会被垃圾回收机制回收
触发器
Quartz中的触发器用来告诉调度程序作业什么时候触发。即Trigger对象时用来触发执行Job的。主要了解CronTriggerImpl和SimpleTriggerImpl。
trigger触发器通用属性
JobKey
表示job实例的标识,触发器被触发时,该指定的job实例会执行
StartTime
表示触发器的时间表首次被触发的时间,它的值的类型是 Java.util.Date
比如现在是1月,定义了定时任务每月11号执行,然后这时设置了startTime为5月1号,那么这个定时任务第一次开始执行的时间是 5月11号
EndTime
指定触发器的不再被触发的时间,它的值的类型是 Java.util.Date
比如定义每月6号执行任务,设置EndTime设置为8月1号,那么最后一次执行的时间是7月6号
SimpleTrigger
作用
在一个指定的时间段内执行一次作业任务
或是在指定的时间间隔内多次执行作业任务
需要注意的点
重复次数可以为0,正整数或是SimpleTrigger.REPEAT_INDEFINITY常量值
重复执行间隔必须为0或长整数
一旦被指定了endTime参数,那么它会覆盖重复次数参数的效果
CronTrigger
基于日历的作业调度器
而不是像SimpleTrigger那样精确执行间隔时间,比SimpleTrigger更常用
Cron表达式
用于配置CronTrigger实例
是由7个子表达式组成的字符串,描述了时间表的详细信息
格式 :秒 分 时 日 月 周 年
quartz.properties
首先读取项目resources目录下的配置文件,如果没有则读取自带的配置
调度器属性 org.quartz.scheduler.instanceName
属性用来区分特定的调度器实例,可以按照功能用途来给调度器起名
org.quartz.scheduler.instanceId
和前者一样,也允许任何字符串,但这个值必须是在所有的调度器实例中是唯一的,尤其是在一个集群当中,作为集群的唯一key。假如你想Quartz帮你生成这个值的话,可以设置为AUTO
线程池
threadCount 线程数量,至少为1
threadPriority 设置线程的优先级 1-10,默认为5
org.quartz.threadPool.class 可以自定义线程池,比如按照业务规模进行动态伸缩
作业存储设置
插件配置