• Quartz技术原理


    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字段已经被修改,这样就实现了多个节点的应用在某一时刻对任务只进行一次调度。

  • 相关阅读:
    「题解」洛谷 P1731 [NOI1999]生日蛋糕
    「题解」洛谷 P1063 能量项链
    Log4j2笔记
    基数排序
    会计知识
    归并排序
    CF668 题解
    拉格朗日反演
    [国家集训队]数颜色 / 维护队列 「带修莫队」
    简单的填数「贪心」
  • 原文地址:https://www.cnblogs.com/qiuhaojie/p/6842489.html
Copyright © 2020-2023  润新知