Spring如何实现Quartz的自动配置

Spring如何实现Quartz的自动配置

  • 1. 开启Quartz自动配置
  • 2. Quartz自动配置的实现过程
    • 2.1 核心类图
    • 2.2 核心方法
  • 3. 任务调度执行
    • 3.1 大致流程
    • 3.2 调整线程池的大小

如果想在应用中使用Quartz任务调度功能,可以通过Spring Boot实现Quartz的自动配置。以下介绍如何开启Quartz自动配置,以及Quartz自动配置的实现过程。

1. 开启Quartz自动配置

QuartzAutoConfiguration自动为Quartz的自动配置类,它的创建了SchedulerFactoryBean。
Spring如何实现Quartz的自动配置_第1张图片
首先通过QuartzAutoConfiguration自动配置类可以看到,要实现Quartz自动配置,需要存在三个类Scheduler.class, SchedulerFactoryBean.class, PlatformTransactionManager.class,其中

  • Scheduler所在包quartz-2.3.0.jar
  • SchedulerFactoryBean所在包spring-context-support-5.2.10.RELEASE.jar
  • PlatformTransactionManager所在包spring-tx-5.2.10.RELEASE.jar
    因此需要确保这三个Jar包在pom文件中存在。
    Spring如何实现Quartz的自动配置_第2张图片
    Quartz的坐标示例:
<dependency>
  <groupId>org.quartz-schedulergroupId>
  <artifactId>quartzartifactId>
  <version>2.3.0version>
dependency>

2. Quartz自动配置的实现过程

2.1 核心类图

下图展示了Quartz的核心类图,其中

  • Scheduler是Quartz调度器的主接口;
  • SchedulerFactory是调度器工厂接口,用户获取调度器实例;
  • StdScheduler是Scheduler的一个实现类,同时也是一个代理类,它会将所有的方法调用直接传递给内部的QuartzScheduler对象;RemoteScheduler是Scheduler的另一个实现类,同时也是一个代理类,它会将所有的方法调用通过RMI传递给远程的QuartzScheduler对象;
  • StdSchedulerFactory是SchedulerFactory的实现类,它会创建QuartzScheduler对象,并返回其代理对象StdScheduler;
  • QuartzSchedulerResources包含所有的资源,包括JobStore、线程池信息等;
  • QuartzSchedulerThread是触发和执行任务的主线程;
    Spring如何实现Quartz的自动配置_第3张图片

2.2 核心方法

  1. 准备SchedulerFactory -> StdSchedulerFactory
  2. 准备Scheduler -> StdScheduler
  3. 注册监听器
  4. 注册任务和触发器
    Spring如何实现Quartz的自动配置_第4张图片

3. 任务调度执行

3.1 大致流程

任务调度的大致流程:

  1. 如果线程池有可用线程,获取待执行Trigger;
  2. 获取触发器Trigger的触发任务,构造JobRunShell;
  3. 放入线程池执行任务,默认使用线程池实现 org.quartz.simpl.SimpleThreadPool;
    Spring如何实现Quartz的自动配置_第5张图片

3.2 调整线程池的大小

线程池的默认大小为10,可以通过配置文件调整默认线程池的大小

spring:
  quartz:
    properties:
      org:
        quartz:
          threadPool:
            threadCount: 15

本文从如何开启Quartz自动配置入手,介绍了自动配置的核心类和自动配置的实现过程,以及任务调度的大致执行逻辑,最后介绍了如何通过Spring配置调整线程池的大小,希望对大家有所帮助。

你可能感兴趣的:(Spring,Spring,Boot,Java,spring,spring,boot,quartz)