【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状态变化

 

posted @ 2018-05-05 16:26  D调的华丽呢  阅读(1003)  评论(0编辑  收藏  举报