本文参考至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状态变化

最新文章

  1. Django博客功能实现—文章评论的显示
  2. 【转载】使用Pandas创建数据透视表
  3. http 各个状态码及对应的java 编程
  4. 大话PHP缓存头
  5. 【BZOJ 4547】【HDU 5157】小奇的集合
  6. bootstrap-13
  7. maven eclipse jetty debug
  8. c# 组元(Tuple)
  9. 每次从vss获取文件都是只读
  10. C语言中结构体定义实际上相当于变量入栈
  11. vs2010 入门程序
  12. QT编程环境搭建
  13. java数据库基本操作(sqlserver 2000为例)
  14. java的四种内部类详解
  15. 理解JAVA的IO
  16. [05] Bean的作用域和生命周期
  17. PHP策略模式1
  18. centos安装python3虚拟环境和python3安装
  19. SQL EXISTS
  20. (转)C#动态webservice调用接口

热门文章

  1. 两个链表的交叉 · Intersection of Two Linked Lists
  2. JavaScript事件 DOMNodeInserted DOMNodeRemoved
  3. CF 990 Educational Codeforces Round 45
  4. mysql导出导入sql文件方法(linux)
  5. [operator]ubuntu + sublime + anaconda 自动补全、指定python版本
  6. redhat6.7在线安装postgresql9
  7. gcc支持的一种结构体赋值方式
  8. metasploitable实践
  9. [C#]DES再一例(转)
  10. Mahout学习资料