Quartz大致是怎样的?[面试5.0]
JobDetail和Trigger绑定,一个JobDetail可以绑定多个Trigger
一个任务调度类实现Job接口,并实现excute方法,并通过Scheduler将JobDetail和Trigger绑定
上下文:JobExecutionContext
参数传递:JobStore将参数值存入内存或数据库,并通过上下文对象可以拿到
怎样设计分布式任务调度?[面试7.0]
将任务存放到数据库(任务配置表)
任务管理动态管理配置(利用Scheduler的API做)
集群化,集群化会出现的问题:
重复跑: 多个节点同一时刻可能同时执行一个任务的调度,同时操作数据库,会有并发问题
漏跑(missfire): Scheduler资源不足,到了该触发执行时上一个执行还未完成,一个节点挂掉了会导致有些Trigger在指定时间该执行的任务没有被执行的情况
Quartz底层是利用数据的行级悲观锁(for update)来解决重复跑和漏跑问题的,对于漏跑时Quartz集群一个节点会接管挂掉节点的任务