开源作业调度框架Quartz框架详细使用说明

Quartz框架详细使用说明

在这里插入图片描述

Quartz 是一个功能强大的开源作业调度框架,广泛用于在Java应用程序中执行定时任务。以下是Quartz框架的详细使用说明、完整代码示例、同类框架对比以及总结表格。


1. Quartz框架概述
  • 特点
    • 灵活的调度:支持多种调度方式(如简单触发器、Cron触发器)。
    • 持久化:支持将任务和触发器存储在数据库中。
    • 集群支持:支持分布式调度,确保高可用性。
    • 插件机制:支持插件扩展,如邮件通知、日志记录等。
    • 任务隔离:任务在独立的线程中执行,互不影响。

2. 安装Quartz

通过Maven添加依赖:

<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.3.2</version>
</dependency>

3. 完整代码示例
(1) 创建一个简单的Job
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;public class SimpleJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {// 任务逻辑System.out.println("SimpleJob is executing at " + new java.util.Date());}
}
(2) 配置和启动Scheduler
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;public class QuartzExample {public static void main(String[] args) {try {// 创建Scheduler实例Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();// 定义JobDetailJobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1") // 任务名称和组.build();// 定义触发器(CronTrigger)Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1") // 触发器名称和组.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 每5秒执行一次.build();// 将JobDetail和Trigger注册到Schedulerscheduler.scheduleJob(job, trigger);// 启动Schedulerscheduler.start();// 保持程序运行一段时间Thread.sleep(60000); // 60秒// 关闭Schedulerscheduler.shutdown();} catch (SchedulerException | InterruptedException se) {se.printStackTrace();}}
}
代码注释
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;public class QuartzExample {public static void main(String[] args) {try {// 创建Scheduler实例Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();// 定义JobDetailJobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1") // 任务名称和组.build();// 定义触发器(CronTrigger)Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1") // 触发器名称和组.withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")) // 每5秒执行一次.build();// 将JobDetail和Trigger注册到Schedulerscheduler.scheduleJob(job, trigger);// 启动Schedulerscheduler.start();// 保持程序运行一段时间Thread.sleep(60000); // 60秒// 关闭Schedulerscheduler.shutdown();} catch (SchedulerException | InterruptedException se) {se.printStackTrace();}}
}

4. 同类功能框架对比
(1) Spring Task
  • 特点
    • 简单易用,集成Spring框架。
    • 支持注解配置(如 @Scheduled)。
    • 适合小型项目或Spring Boot应用。
  • 示例
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;@Component
    public class ScheduledTasks {@Scheduled(fixedRate = 5000) // 每5秒执行一次public void reportCurrentTime() {System.out.println("Spring Task is executing at " + new java.util.Date());}
    }
    
(2) Apache Camel
  • 特点
    • 集成多种协议和数据格式。
    • 支持复杂的路由和消息处理。
    • 适合企业级集成项目。
  • 示例
    import org.apache.camel.builder.RouteBuilder;
    import org.apache.camel.main.Main;public class CamelQuartzExample extends RouteBuilder {@Overridepublic void configure() throws Exception {from("quartz2://myGroup/myTimerName?cron=0/5+*+*+*+*+?").process(exchange -> {System.out.println("Camel Quartz is executing at " + new java.util.Date());});}public static void main(String[] args) throws Exception {Main main = new Main();main.addRouteBuilder(new CamelQuartzExample());main.run(args);}
    }
    
(3) Quartz2
  • 特点
    • Quartz的升级版本,功能更强大。
    • 支持更多调度方式和插件。
    • 适合复杂调度需求。
  • 示例
    import org.quartz.*;
    import org.quartz.impl.StdSchedulerFactory;public class Quartz2Example {public static void main(String[] args) {try {Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();JobDetail job = JobBuilder.newJob(SimpleJob.class).withIdentity("job1", "group1").build();Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?")).build();scheduler.scheduleJob(job, trigger);scheduler.start();Thread.sleep(60000);scheduler.shutdown();} catch (SchedulerException | InterruptedException se) {se.printStackTrace();}}
    }
    

5. 关键差异总结
框架特点适用场景核心功能配置方式
Quartz灵活的调度、持久化、集群支持、插件机制复杂调度需求、持久化任务、集群环境定义Job、Trigger、SchedulerXML/Java配置
Spring Task简单易用、集成Spring框架、注解配置小型项目、Spring Boot应用注解配置定时任务注解配置 (@Scheduled)
Apache Camel集成多种协议、复杂路由和消息处理企业级集成项目、复杂路由定义路由、集成多种协议XML/Java DSL配置
Quartz2Quartz的升级版本,功能更强大、更多调度方式和插件复杂调度需求、持久化任务、集群环境定义Job、Trigger、SchedulerXML/Java配置

6. 选择建议
  • 复杂调度需求:Quartz 或 Quartz2。
  • 简单定时任务:Spring Task。
  • 企业级集成:Apache Camel。
  • 集群环境:Quartz 或 Quartz2。

通过以上详细说明和示例,您可以更好地理解和使用Quartz框架,并根据项目需求选择合适的调度框架。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80390.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java实现背景图片加自适应水印图片

由于每张图片的宽高比例不一致&#xff0c;希望使得水印在每张图上的尺寸可以跟随背景图变化&#xff0c;自动调整水印大小。避免每张背景的图所显示的logo水印不至于那么突兀。 一、导入所需Jar包 <dependency><groupId>cn.hutool</groupId><artifactId…

代理ip和实际ip的区别和联系

在互联网时代&#xff0c;IP地址是每个设备连接网络的“身份证”&#xff0c;但你是否知道IP地址还分为‌代理IP‌和‌实际IP‌&#xff1f;它们各自扮演什么角色&#xff1f;为什么有人选择使用代理IP&#xff1f;实际IP又有哪些不可替代的作用&#xff1f;本文将深入解析代理…

mybatis-plus里的com.baomidou.mybatisplus.core.override.MybatisMapperProxy 类的详细解析

以下是 com.baomidou.mybatisplus.core.override.MybatisMapperProxy 类的详细解析&#xff1a; 1. 类的作用 MybatisMapperProxy 是 MyBatis-Plus 框架中用于实现 Mapper 接口动态代理的核心类。它继承自 MyBatis 的 MapperProxy&#xff0c;并扩展了以下功能&#xff1a; …

Memcached 主主复制架构搭建与 Keepalived 高可用实现

实验目的 掌握基于 repcached 的 Memcached 主主复制配置 实现通过 Keepalived 的 VIP 高可用机制 验证数据双向同步及故障自动切换能力 实验环境 角色IP 地址主机名虚拟 IP (VIP)主节点10.1.1.78server-a10.1.1.80备节点10.1.1.79server-b10.1.1.80 操作系统: CentOS 7 软…

如何成功防护T级超大流量的DDoS攻击

防护T级超大流量的DDoS攻击需要综合技术、架构与运营策略的多层次防御体系。以下是基于最新技术实践和行业案例总结的关键防护策略&#xff1a; 一、流量清洗与分布式处理 部署流量清洗中心 T级攻击的核心防御依赖于专业的流量清洗技术。通过部署分布式流量清洗集群&#xff0c…

基于SpringAI Alibaba实现RAG架构的深度解析与实践指南

一、RAG技术概述 1.1 什么是RAG技术 RAG&#xff08;Retrieval-Augmented Generation&#xff09;检索增强生成是一种将信息检索技术与生成式AI相结合的创新架构。它通过以下方式实现智能化内容生成&#xff1a; 知识检索阶段&#xff1a;从结构化/非结构化数据源中检索相关…

数字化技术的五个环节:大数据、云计算、人工智能、区块链、移动互联网

在21世纪的科技浪潮中&#xff0c;数字化技术以其强大的生命力和无限的潜力&#xff0c;正逐步重塑着我们的世界。大数据、云计算、人工智能、区块链、移动互联网&#xff0c;这五大数字化技术的环节&#xff0c;如同构建智慧未来的基石&#xff0c;每一方面都承载着推动社会进…

Java Web容器分类及对比

Java Web容器分类及对比 1. 按功能分类 (1) Servlet/JSP容器&#xff08;轻量级&#xff0c;仅支持Web层&#xff09; Tomcat 特点&#xff1a;轻量级、开源、仅支持Servlet/JSP规范&#xff0c;适合Web应用。 使用方式&#xff1a; // 通过Maven依赖启动Spring Boot应用&…

【Java并发】【LinkedBlockingQueue】适合初学体质的LinkedBlockingQueue入门

&#x1f44b;hi&#xff0c;我不是一名外包公司的员工&#xff0c;也不会偷吃茶水间的零食&#xff0c;我的梦想是能写高端CRUD &#x1f525; 2025本人正在沉淀中… 博客更新速度 &#x1f44d; 欢迎点赞、收藏、关注&#xff0c;跟上我的更新节奏 &#x1f4da;欢迎订阅专栏…

Python在AI虚拟教学视频开发中的核心技术与前景展望

Python在AI虚拟教学视频开发中的核心技术与前景展望 一、引言&#xff1a;AI虚拟教学的技术革新 随着教育数字化转型加速&#xff0c;AI虚拟教学视频凭借个性化、沉浸式体验成为教育科技的新风口。Python以其强大的多模态处理能力、丰富的开源生态和跨领域兼容性&#xff0c;成…

shadcn/radix-ui的tooltip高度定制arrow位置

尝试了半天&#xff0c;后来发现&#xff0c;不支持。。。。。就是不支持 那箭头只能居中 改side和align都没用&#xff0c;下面有在线实例 https://codesandbox.io/p/sandbox/radix-ui-slider-forked-zgn7hj?file%2Fsrc%2FApp.tsx%3A69%2C21 但是呢&#xff0c; 第一如果…

自动清空 maven 项目临时文件,vue 的 node_modules 文件

echo off setlocal enabledelayedexpansion :: vue 的 node_modules 太大 :: maven 打包后的 target 文件也很大&#xff0c; :: 有些项目日志文件也很大&#xff0c;导致磁盘空间不足了&#xff0c; :: 所以写了个脚本&#xff0c;只要配置一下各项目目录&#xff0c; :: 双击…

[Mybatis-plus]

简介 MyBatis-Plus &#xff08;简称 MP&#xff09;是一个 MyBatis的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变。Mybatis-plus官网地址 注意&#xff0c;在引入了mybatis-plus之后&#xff0c;不要再额外引入mybatis和mybatis-spring&#xff0c;避免因为版本…

管理100个小程序-很难吗

20公里的徒步-真难 群里的伙伴发起了一场天目山20公里徒步的活动&#xff0c;想着14公里都轻松拿捏了&#xff0c;思考了30秒后&#xff0c;就借着春风带着老婆孩子就出发了。一开始溪流清澈见底&#xff0c;小桥流水没有人家&#xff1b;青山郁郁葱葱&#xff0c;枯藤老树没有…

大模型工业化元年:GPT-5开启通用AI新纪元,中国技术如何破局?

过去一周&#xff0c;AI领域的焦点无疑是OpenAI发布的GPT-5预览版&#xff0c;以及全球大模型技术从实验室迈向工业化的关键转折。这场变革不仅标志着通用人工智能&#xff08;AGI&#xff09;的进一步逼近&#xff0c;更掀起了全球产业链的竞争与反思。本文将从技术突破、产业…

软考【网络工程师】2023年5月上午题答案解析

1、固态硬盘的存储介质是()。 A 光盘 B 闪存 C 软盘 D 磁盘 答案是 B。 固态硬盘(Solid State Drive),简称 SSD,是用固态电子存储芯片阵列制成的硬盘,其存储介质是闪存(Flash Memory)。闪存具有非易失性,即在断电后仍能保留存储的数据,且读写速度快、抗震性强、能…

【速写】钩子与计算图

文章目录 前向钩子反向钩子的输入反向钩子的输出 前向钩子 下面是一个测试用的计算图的网络&#xff0c;这里因为模型是自定义的缘故&#xff0c;可以直接把前向钩子注册在模型类里面&#xff0c;这样会更加方便一些。其实像以前BERT之类的last_hidden_state以及pool_output之…

高级电影感户外街拍人像摄影后期Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 高级电影感户外街拍人像摄影后期 Lr 调色&#xff0c;是运用 Adobe Lightroom 软件&#xff0c;对户外街拍的人像照片进行后期处理&#xff0c;以塑造出具有电影质感的独特视觉效果。此调色过程借助 Lr 丰富的工具与功能&#xff0c;从色彩、光影、对比度等多维度着手…

16.QT-Qt窗口-菜单栏|创建菜单栏|添加菜单|创建菜单项|添加分割线|添加快捷键|子菜单|图标|内存泄漏(C++)

Qt窗⼝是通过QMainWindow类来实现的。 QMainWindow是⼀个为⽤⼾提供主窗⼝程序的类&#xff0c;继承⾃QWidget类&#xff0c;并且提供了⼀个预定义的布局。QMainWindow包含⼀个菜单栏&#xff08;menu bar&#xff09;、多个⼯具栏(tool bars)、多个浮动窗⼝&#xff08;铆接部…

【kafka初学】启动执行命令

接上篇&#xff0c;启动&#xff1a;开两个cdm窗口 注意放的文件不要太深或者中文&#xff0c;会报命令行太长的错误 启动zookeeper bin\windows\zookeeper-server-start.bat config\zookeeper.properties2. 启动kafka-serve bin\windows\kafka-server-start.bat config\serv…