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

Springboot 开发之 Quartz 任务调度框架简介

引言

Quartz Scheduler是一个功能丰富的开源作业调度库,它允许开发人员以灵活的方式创建和管理定时任务。以下是对Quartz Scheduler的详细解析:

  • 官网地址:https://www.quartz-scheduler.org/
  • w3cschool 官方文档:https://www.w3cschool.cn/quartz_doc/

一、核心概念

Quartz Scheduler的核心概念主要包括三个部分:

  • Job:表示被调度的任务,需要实现org.quartz.Job接口中的execute方法。
void execute(JobExecutionContext context)
  • JobDetail,用于设置任务的属性,如任务的名称、组名、任务类、任务数据等。
  • Trigger:表示触发器,用于定义任务执行的时间规则。Quartz提供了两种主要的触发器类型:SimpleTriggerCronTriggerSimpleTrigger用于在 特定时间后开始执行,并以一定的重复间隔执行。CronTrigger则基于Cron表达式,提供了更复杂的时间调度能力。
  • Scheduler:调度器,是Quartz框架的心脏,负责基于Trigger设定的时间来执行Job。它管理着所有的Job和Trigger,确保它们能够按照预定的计划执行。

在这里插入图片描述

二、Springboot 集成 quartz

1. 创建一个新的 Spring Boot 项目,添加 Quartz 依赖到 pom.xml 文件中:


<dependencies><!-- 其他依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-quartz</artifactId></dependency>
</dependencies>

2. Quartz 配置

在 Spring Boot 应用中配置 Quartz,主要涉及到配置类和任务的创建。

(1)配置类

创建一个配置类,用于配置 Quartz 的相关属性:

@Configuration
public class QuartzConfig {@Beanpublic JobStore jobStore(DataSource dataSource) {JDBCJobStoreFactoryBean factory = new JDBCJobStoreFactoryBean();factory.setDataSource(dataSource);factory.setTablePrefix("QRTZ_");return factory.getObject();}@Beanpublic SchedulerFactoryBean schedulerFactoryBean(DataSource dataSource) {SchedulerFactoryBean factory = new SchedulerFactoryBean();factory.setJobStore(jobStore(dataSource));// 可以设置其他属性,如线程池大小等return factory;}// 省略其他配置...
}

(2)任务和触发器

定义一个任务,实现 Job 接口,并创建触发器来触发任务:

@Component
public class MyJob implements Job {@Overridepublic void execute(JobExecutionContext context) {// 任务逻辑System.out.println("执行任务:" + new Date());}
}

创建触发器和作业详情,并注册到调度器:

@Service
public class JobService {@Autowiredprivate Scheduler scheduler;@PostConstructpublic void init() throws SchedulerException {JobDetail jobDetail = JobBuilder.newJob(MyJob.class).withIdentity("myJob", "group1").build();Trigger trigger = TriggerBuilder.newTrigger().withIdentity("myTrigger", "group1").startNow().withSchedule(CronScheduleBuilder.cronSchedule("0/10 * * * * ?")) // 每10秒执行一次.build();scheduler.scheduleJob(jobDetail, trigger);}
}

实战演练
启动 Spring Boot 应用
运行 Spring Boot 应用的主类,应用将启动并初始化 Quartz,开始执行定时任务。

验证任务执行
观察控制台输出,你将看到任务按照预定的计划执行,并打印出执行的时间。

参考文献:

  • https://www.cnblogs.com/muxi0407/p/11969119.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 自定义View-- wifi强度
  • 从0开始搭建vue + flask 旅游景点数据分析系统( 六):搭建后端flask框架
  • Win32注册表操作
  • Rust 所有权
  • 大数据-Big Data(一):概述与基础
  • Tracecat:开源 SOAR
  • Transformer 模型中的 QKV 机制是如何运作的
  • 区块链平台的图灵完备性
  • 探秘C# LINQ元素运算:原理阐释与实践指南
  • day 22线程间通信
  • Java参数传递
  • 深度学习-----------数值稳定性
  • docker部署jenkins和jenkins的基本使用
  • 【SpringCloud】SpringCloudNetflix笔记
  • 重塑购车体验,实时云渲染赋能东风日产探路云看车新体验
  • 5、React组件事件详解
  • Angular4 模板式表单用法以及验证
  • Java超时控制的实现
  • node和express搭建代理服务器(源码)
  • python学习笔记-类对象的信息
  • Selenium实战教程系列(二)---元素定位
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • Vue 2.3、2.4 知识点小结
  • Vue全家桶实现一个Web App
  • Vue组件定义
  • 构造函数(constructor)与原型链(prototype)关系
  • 记一次用 NodeJs 实现模拟登录的思路
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 使用parted解决大于2T的磁盘分区
  • 数据结构java版之冒泡排序及优化
  • 进程与线程(三)——进程/线程间通信
  • (十七)Flink 容错机制
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (译)2019年前端性能优化清单 — 下篇
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转载)Linux 多线程条件变量同步
  • **python多态
  • .NET Core中的时区转换问题
  • .net 调用php,php 调用.net com组件 --
  • .Net 垃圾回收机制原理(二)
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • :class的用法及应用
  • @Autowired和@Resource装配
  • [2009][note]构成理想导体超材料的有源THz欺骗表面等离子激元开关——
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [ARM]ldr 和 adr 伪指令的区别
  • [AutoSar]BSW_Memory_Stack_004 创建一个简单NV block并调试
  • [Avalon] Avalon中的Conditional Formatting.
  • [BUUCTF NewStarCTF 2023 公开赛道] week4 crypto/pwn
  • [datastore@cyberfear.com].Elbie、[thekeyishere@cock.li].Elbie勒索病毒数据怎么处理|数据解密恢复
  • [Docker]五.Docker中Dockerfile详解
  • [DP 训练] Longest Run on a Snowboard, UVa 10285
  • [Eclipse] 详细设置护眼背景色和字体颜色并导出