Quartz技术原理
2024-08-30 08:37:16
Quartz运行基本:
(1) 创建任务jobDetail(放入具体的jobImpl),触发器trigger(保存job的触发策略),均放入调度器scheduler。
(2) 执行scheduler.start()。
(3) 对于quartz.properties,要求较高的场景需要自定义配置,比如设置足够多的线程数。否则使用默认配置即可满足。
Schedule调度的线程,主要有2个:
(1) 常规调度线程:轮询存储的所有trigger,如有需要触发的trigger,即到了下一次触发的时间,则从任务执行线程池获取一个空闲线程,执行与该trigger关联的任务。
(2) Misfire线程:扫描所有的trigger,查看是否有misfiredtrigger,如有,则根据misfire的策略分配处理(fire now OR wait for the next fire)。
Quartz的集群调度:
(1) 集群上的每一个节点,通过相同的数据库表来协调调度。DB中存有trigger表,并且每一个节点要查询trigger表时必须拿到锁。
(2) 当一个机子拿到trigger表锁,查询trigger表,如有要触发的trigger,则执行相应任务X,并修改此trigger的NEXT_FIRE_TIME字段,即下次执行时间。这样,当别的机子拿到锁,也查询trigger表,就不会再执行上一次trigger,因为trigger的NEXT_FIRE_TIME字段已经被修改,这样就实现了多个节点的应用在某一时刻对任务只进行一次调度。
最新文章
- Mac下安装Matlab R2015b
- nodeType、nodeName和nodeValue
- WebRTC录音(2)-录音文件转换成WAV格式
- HTTP协议header标头详解
- (转)浅谈.NET下的多线程和并行计算(一)前言
- 将java类的泛型集合转换成json对象
- node包管理器
- HDU 2859 Phalanx
- 实现径向变换用于样本增强《Training Neural Networks with Very Little Data-A Draft》
- hdu4149 Magic Potion
- 【步步为营 Entity Framework+Reporting service开发】-(2) Code Fir
- Java 非递归实现 二叉树的前中后遍历以及层级遍历
- Matplotlib学习---用matplotlib画散点图,气泡图(scatter plot, bubble chart)
- Status bar and navigation bar appear over my view's bounds in iOS 7
- vm #set、日期截取、#foreach&;#if
- JavaScript--Array; Array.prototype
- Sourcetree报错: 您没有已经配置扩展集成设置的远端
- JAVA面试题集---数据库方面_
- deploy: [mkdir] Created dir: C:\Program Files\Java\apache-cxf-2.4.2\samples\java_first_pojo\build [loadfile] Do not set property srcbuild.classpath as its length is 0.
- HDU 2036 改革春风吹满地 (计算几何)