当前位置: 首页 > news >正文

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。
在这里插入图片描述
首先通过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文件中存在。
    在这里插入图片描述
    Quartz的坐标示例:
<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.0</version>
</dependency>

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

2.1 核心类图

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

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

2.2 核心方法

  1. 准备SchedulerFactory -> StdSchedulerFactory
  2. 准备Scheduler -> StdScheduler
  3. 注册监听器
  4. 注册任务和触发器
    在这里插入图片描述

3. 任务调度执行

3.1 大致流程

任务调度的大致流程:

  1. 如果线程池有可用线程,获取待执行Trigger;
  2. 获取触发器Trigger的触发任务,构造JobRunShell;
  3. 放入线程池执行任务,默认使用线程池实现 org.quartz.simpl.SimpleThreadPool;
    在这里插入图片描述

3.2 调整线程池的大小

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

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

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

http://www.lryc.cn/news/41856.html

相关文章:

  • 计算机组成原理——作业四
  • 2023前端面试题(经典面试题)
  • 【Linux内网穿透】使用SFTP工具快速实现内网穿透
  • SQL语句性能分析
  • 【K3s】第28篇 详解 k3s-killall.sh 脚本
  • 生成时序异常样本-学习记录-未完待续
  • 自定义类型的超详细讲解ᵎᵎ了解结构体和位段这一篇文章就够了ᵎ
  • 【五】springboot启动源码 - onRefresh
  • 带你一文透彻学习【PyTorch深度学习实践】分篇——线性回归(训练周期:前馈、反馈、权重更新)
  • 【前端八股文】浏览器系列:性能优化——HTML、CSS、JS、渲染优化
  • Linux分文件编程:静态库与动态库的生成和使用
  • 技术人的管理学-业务管理
  • Dubbo的独门绝技,SPI实现原理分析
  • 单例模式,饿汉与懒汉
  • Prometheus监控实战之Blackbox_exporter黑盒监测
  • 【蓝桥杯集训·每日一题】AcWing 1051. 最大的和
  • 【Unity工具,简单应用】Photon + PUN 2,做一个简单多人在线聊天室
  • 程序员增加收入实战 让小伙伴们都加个鸡腿
  • GPIO四种输入和四种输出模式
  • ChatGPT能够改变时代吗?一点点思考
  • Markdown如何使用详细教程
  • HTML5庆祝生日蛋糕烟花特效
  • 算法套路四——反转链表
  • 多线程 (六) wait和notify
  • React--》状态管理工具—Mobx的讲解与使用
  • 有效的括号长按键入验证外星语词典字符的最短距离用栈实现队列
  • 《前端开发者的进阶之路》
  • 为什么说网络安全是风口行业?是IT行业最后的红利?
  • 使用shell 脚本,批量解压一批zip文件,解压后的文件放在以原zip文件名前10个字符的文件夹中的例子
  • 01 | Msyql系统架构