核心概念
Schduler:调度器,主要用于管理作业(JobDetail),触发器(Trigger)
JobDetail:作业实例,内部包含作业运行的具体逻辑
Trigger:触发器实例,内部包含作业执行的实践计划
工作流程
首页基于 Job 接口定义你的作业 JobDetail 实例和触发器 Trigger 实例对象
将定义的作业和触发器实例对象通过调度器 scheduleJob,开始调度执行
调度器启动工作线程开始执行 JobDetail 实例的 execute 方法内容
任务运行时所需信息通过,JobExecutionContext 对象传递到工作线程,也可以在多个工作线程中跨线程传递
唯一标识
创建作业和触发器都需要通过(JobKey 和 TriggerKey + Group)组合创建唯一标识
你可以通过唯一标识在 Schduler 中获取作业对象,并且管理和维护他们
引入 Group 标识的目的也是了更好的让你管理作业环境:例如:通过不同的 Group 来区分:【测试作业,生产作业】等
JobDetail 的更多细节
每次执行任务都会创建一个新的 JobDetail 实例对象,意味每次执行的 JobDetail 都是新对象,JobDetail 对象也是无状态的
JobDetail 实例对象任务完成后 (execute 方法),调度器 Schduler 会将作业实例对象删除,然后进行垃圾回收
JobDetail 实例之间的状态数据,只能通过 JobExecutionContext(实际上是 JobDataMap) 进行跨作业传递
JobDataMap 的使用
虽然 JobDataMap 可以传递任意类型的数据,对象的反序列化在版本迭代中容易遇到类版本控制的问题如果从长远的安全性考虑,尽可能的将 jobDataMap 设置为只允许存放基本类型和字符串(通过 jobStore.useProperties 设置)。Quartz 会自动通过 Job 类的 setter 方法和 JobDataMap 主键匹配,帮助你自动注入属性到 Job 类中。
通过org.quartz.threadPool.threadCount设置足够的线程数可提高多job场景下的运行性能。
www.jianshu.com/p/bab8e4e32…