【Quartz】工作原理
本文参考至http://www.cnblogs.com/davidwang456/p/4205237.html和https://blog.csdn.net/guolong1983811/article/details/51501346
1 集群架构
Quartz的分布式架构如上图,可以看到数据库是各节点上调度器的枢纽。各个节点并不感知其他节点的存在,只是通过数据库来进行间接的沟通。
实际上,Quartz的分布式策略就是一种以数据库作为边界资源的并发策略.每个节点都遵守相同的操作规范,使得对数据库的操作可以串行执行。而不同名称的调度器又可以互不影响的并行运行.
2 调度机制
2.1 任务调度通讯机制
Quartz运行时主要有四个角色:QuartzSchedulerThread类作为主体,循环执行调度流程;JobStore作为中间层,按照quartz的并发策略执行数据库操作,完成主要的调度逻辑;JobRunShellFactory负责实例化JobDetail对象,将其放入线程池运行;LockHandler负责获取LOCKS表中的数据库锁。
2.2 任务调度流程
0.调度器线程run()
1.获取待触发trigger
1.1数据库LOCKS表TRIGGER_ACCESS行加锁
1.2读取JobDetail信息
1.3读取trigger表中触发器信息并标记为"已获取"
1.4 commit事务,释放锁
2.触发trigger
2.1数据库LOCKS表STATE_ACCESS行加锁
2.2确认trigger的状态
2.3读取trigger的JobDetail信息
2.4读取trigger的Calendar信息
2.5更新trigger信息
2.6 commit事务,释放锁
3实例化并执行Job
3.1从线程池获取线程执行JobRunShell的run方法
2.3 任务调度时序
2.4 Trigger状态变化
最新文章
- Django博客功能实现—文章评论的显示
- 【转载】使用Pandas创建数据透视表
- http 各个状态码及对应的java 编程
- 大话PHP缓存头
- 【BZOJ 4547】【HDU 5157】小奇的集合
- bootstrap-13
- maven eclipse jetty debug
- c# 组元(Tuple)
- 每次从vss获取文件都是只读
- C语言中结构体定义实际上相当于变量入栈
- vs2010 入门程序
- QT编程环境搭建
- java数据库基本操作(sqlserver 2000为例)
- java的四种内部类详解
- 理解JAVA的IO
- [05] Bean的作用域和生命周期
- PHP策略模式1
- centos安装python3虚拟环境和python3安装
- SQL EXISTS
- (转)C#动态webservice调用接口
热门文章
- 两个链表的交叉 · Intersection of Two Linked Lists
- JavaScript事件 DOMNodeInserted DOMNodeRemoved
- CF 990 Educational Codeforces Round 45
- mysql导出导入sql文件方法(linux)
- [operator]ubuntu + sublime + anaconda 自动补全、指定python版本
- redhat6.7在线安装postgresql9
- gcc支持的一种结构体赋值方式
- metasploitable实践
- [C#]DES再一例(转)
- Mahout学习资料