Quartz启动过程分析

昨天写了篇SpringBoot整合Quartz的文章,然后也正巧不知道写什么了,就带着好奇写了这篇文章,明天的话再谈一谈执行流程。一、简要1.1、quartz

本篇文章给大家谈谈Quartz启动过程分析,以及对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

首先SchedulerFactory创建Scheduler调度器,然后Scheduler调度器调用Trigger来执行。执行时获取对应的JobDetail信息,最终找到对应的Job类来执行业务逻辑。

1.2、quartz中的线程

执行线程主要由线程池维护,在需要定时执行时使用。这里使用的线程池是org.quartz.simpl.SimpleThreadPool。默认线程数为10(这些是程序启动过程中信息中打印的。可以看到)

调度线程主要分为Regular Scheduler Thread和Misfire Scheduler Thread;常规线程轮询触发器。如果有要触发的Trigger,则从任务线程池中获取一个空闲线程,然后执行与变化的Trigger关联的作业; Misfire Thraed 它会扫描所有触发器以查看是否有任何遗漏。如果有,就按照一定的策略来处理。

二、quartz 启动流程

StdSchedulerFactory通常用于创建Scheduler调度程序。

SchedulerFactoryBean配置类中配置了相关的配置和配置文件参数,因此会读取配置文件参数并初始化各个组件。

启动该过程的一般步骤如下:

首先读取配置文件,初始化SchedulerFactoryBean,初始化SchedulerFactory,实例化执行线程池(TheadPool),实例化数据存储,初始化QuartzScheduler(Scheduler的简单实现,包括调度作业,注册JobListener实例等)新建一个QuartzSchedulerThread调度线程(负责执行在QuartzScheduler中注册的触发触发器的线程开始运行调度,注册监听器,注册Job和TriggerSchedulerFactoryBean,初始化完成后执行start()方法创建ClusterManager线程并启动线程。创建MisfireHandler线程并启动该线程,设置QuartzSchedulerThread的paused=false,调度线程真正开始执行run方法

2.1、读取配置文件

org.quartz包下,文件名为quartz.properties

其内容是:

2.2、初始化SchedulerFactoryBean

当服务器启动时,Spring 加载相关bean。

SchedulerFactoryBean实现了InitializingBean接口,因此当bean初始化时,会执行afterPropertiesSet方法。

该方法会调用SchedulerFactory,通常是StdSchedulerFactory来创建Scheduler调度器

2.3、初始化SchedulerFactory

这一步是在SchedulerFactoryBean的prepareSchedulerFactory方法中初始化的,在上一步中也看到过~

我们继续调试

这一大节都是关于获取配置文件信息的。我们直接把断点放在方法的最后,看看里面的值以及接下来要调试的方法。

在此之后,我们将返回

this.scheduler=prepareScheduler(prepareSchedulerFactory());在这一步中,得到

prepareSchedulerFactory()返回,然后往下走。

上面的if我就不看了,只看create方法做了什么。

这里的this.schedulerName是quartzScheduler

这里的schedulerFactory.getScheduler()值得我们关注。点进去看看StdSchedulerFactory的getScheduler()方法做了什么?

Quartz启动过程分析

我想到的是石英中的重要组成部分,它们都为空,这意味着我们必须进行下一步。

2.4、实例化执行线程池(TheadPool)

2.5、实例化数据存储

2.6、初始化QuartzScheduler

QuartzScheduler 是Scheduler 的简单实现,包括调度作业、注册JobListener 实例等方法。

2.7、new一个QuartzSchedulerThread调度线程

QuartzSchedulerThread 负责执行触发QuartzScheduler中注册的触发器的线程并开始运行

到了那里我们就不想再停留了,直接回到方法调用点。

2.8、注册监听器,注册Job和Trigger

无需再点击内部查看如何注册。想看xdm就去Debug吧~

至此SchedulerFactoryBean初始化完成。下一步是执行start()方法

2.9、SchedulerFactoryBean执行start()方法

这里的start方法是在bean生命周期中。我们在这里不关心。

但是方法里面的startScheduler(this.scheduler, this.startupDelay)方法

这两个人不想继续看下去了~,累了……

红字的那两个我们就不要继续看下去了。我们重点关注this.resources.getJobStore().schedulerStarted();这也是下一步的开始~

2.10、创建Cluszaizaianager线程、创建MisfireHandler线程

我本来是想关注voidrecoverJobs()方法

本来还想点击executeInNonManagedTXLock()方法继续看看,但是立刻就麻木了。我只知道这是一项恢复任务。看上去很不舒服,而且里面还更大。主要是我没有什么想法~

2.11、QuartzSchedulerThread开始执行run方法

设置QuartzSchedulerThread的paused=false,调度线程才真正开始调度,开始执行run方法。

这才是调度的真正开始,前面的步骤只能算是准备工作。

什么时候触发、获取线程执行任务、如何查询数据库等等,可以说都是从这里开始的。不过今天跑了,明天或者下次再回来~

用户评论

Quartz启动过程分析
久爱不厌

Quartz的启动流程真是太详细了!以前一直对它是怎么工作的模糊不清,现在一看就豁然开朗了。感谢博主把这个复杂的东西解释得这么清楚易懂!

    有9位网友表示赞同!

Quartz启动过程分析
孤者何惧

终于找到了我想要的信息!我最近在做一些关于Quartz的项目,启动流程真的很难搞明白,这篇分析简直就是救星啊!

    有9位网友表示赞同!

Quartz启动过程分析
陌上花

这篇文章写的很棒!非常清晰地介绍了Quartz的启动流程,逻辑很清晰,配图也很到位。对于初学者来说非常有帮助!不过我还有一个小问题…

    有8位网友表示赞同!

Quartz启动过程分析
灬一抹丶苍白

虽然讲的很清楚了,但我还是觉得Quartz的启动流程有点复杂呀,感觉需要花点时间理解才能完全消化。

    有6位网友表示赞同!

Quartz启动过程分析
毒舌妖后

这篇分析真是太棒了!以前自己琢磨过Quartz的启动流程,总觉得像绕弯路一样。现在看了这篇分析,我豁然开朗了!

    有17位网友表示赞同!

Quartz启动过程分析
呆萌

说实话,这篇文章写的有些过于基础了,对于已经比较熟悉Quartz的人来说可能读起来有点无聊。

    有15位网友表示赞同!

Quartz启动过程分析
入骨相思

Quartz 的启动流程确实是一个很重要的点,但这篇文章好像只介绍了最基本的步骤,有没有更深入的探讨呢?比如不同Scheduler类型的特性等等…

    有18位网友表示赞同!

Quartz启动过程分析
各自安好ぃ

太赞了!终于有人把Quartz的启动过程解释清楚了。我一直困扰这个问题,现在算是解开了迷团!

    有7位网友表示赞同!

Quartz启动过程分析
安陌醉生

博主分析的很棒,不过我觉得图片可以少些,这样看起来会更简洁一些

    有16位网友表示赞同!

Quartz启动过程分析
花花世界总是那么虚伪﹌

这篇文章写的真好,我一直在尝试学习Quartzcheduler的启动流程,终于找到了一篇靠谱的详解。

    有13位网友表示赞同!

Quartz启动过程分析
ヅ她的身影若隐若现

虽然我之前已经对 Quartz 有一定的了解,但这篇分析却让我对它的启动流程有了更深入的理解,真的是受益匪浅!

    有6位网友表示赞同!

Quartz启动过程分析
日久见人心

Quartz 的启动流程确实很复杂,这篇文章把这个复杂的操作分解得很清楚,很容易理解。不过我还是觉得一些关键概念可以解释得更详细一点。

    有19位网友表示赞同!

Quartz启动过程分析
空巷

这篇分析对我来说太基础了,我需要的是更深入的讲解,比如 Quartz 和容器的集成、不同调度策略的优缺点等等。

    有12位网友表示赞同!

Quartz启动过程分析
还未走i

文章写的不错啊! 我一直在寻找关于Quartz启动流程的讲解, 这篇博客终于解开了我的疑惑,简单易懂,非常感谢博主!

    有12位网友表示赞同!

Quartz启动过程分析
一笑抵千言

我之前也对 Quartz 的启动流程一头雾水,看了这篇文章后终于明白了! 文章深入浅出,配图清晰,很有帮助!

    有15位网友表示赞同!

Quartz启动过程分析
棃海

对于初学者来说这篇分析简直太棒了!把它讲得这么简单易懂,真的让我受益匪浅。不过对于有一些经验的人来说,这篇博文可能有些过于基础了,希望能有更高级的讲解。

    有18位网友表示赞同!

Quartz启动过程分析
凉城°

Quartz 是一个非常强大的任务调度框架,这篇文章对它的启动流程进行详细分析,帮助我们更好地理解它的工作机制。

    有5位网友表示赞同!

Quartz启动过程分析
抚涟i

文章分析得很到位,清晰地描述了Quartz的各个组件以及它们之间的交互关系。对学习Quartz的用户来说非常实用!

    有12位网友表示赞同!

原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/118800.html

(0)
小su's avatar小su
上一篇 2024年9月1日 上午11:14
下一篇 2024年9月1日 上午11:17

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注