热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Quartz使用介紹

Qaurtz简介Quartz是一个完全由java编写的任务调度框架。那么什么是任务调度呢?很多时候你可能会收到某个需求,要求程序“隔某个特定的时间段在某

Qaurtz简介

Quartz是一个完全由java编写的任务调度框架。
那么什么是任务调度呢?很多时候你可能会收到某个需求,要求程序 “ 隔某个特定的时间段 在某个特定的时间 做某个特定的事情 ”,比如:

  1. 每天早上8:00自动发送早安给你的爸爸妈妈
  2. 每年12月1日0点发送生日祝福给你的朋友
  3. 每个月的9号自动还款蚂蚁花呗

这些都是任务调度。而Quartz就是可以方便你创建各种任务定时执行的一个框架,而且触发这些任务的时间点可以设计的非常复杂,几乎都能完美匹配你的要求。

优点

  1. 简单高效。Quartz用起来非常简单。你只要写一个继承org.quartz.Job的job类,将逻辑写入execute()方法,并将这个类设定好时间,之后Quartz就能自动帮你监控这个任务,到了指定时间自动执行,就不再需要你管这些任务了。
  2. 容错。 如果其中的一个节点挂了,并不会影响其他节点上面任务的执行。
  3. 支持分布式

主要API

  • Scheduler - 与调度器交互的主要API。
  • Job - 需要被调度器调度的任务必须实现的接口。
  • JobDetail - 用于定义任务的实例。
  • Trigger - 用于定义调度器何时调度任务执行的组件。
  • JobBuilder - 用于定义或创建JobDetail的实例 。
  • TriggerBuilder - 用于定义或创建触发器实例。

实例介绍

使用Quartz开发,首先,你要写一个实现org.quartz.Job的类,重写org.quartz.Job接口唯一的方法execute(),在这个方法里面写你要定时执行的代码。

public class TestJob implements Job{public void execute(JobExecutionContext arg0) throws JobExecutionException {Date date=new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.print("now:"+sf.format(date));}
}

然后,创建一个执行任务的类,创建scheduler,这可以理解为一个调度程序-任务执行计划表,在这个表里面对各个job任务进行时间分配。

SchedulerFactory sfact = new StdSchedulerFactory();
Scheduler schedule = sfact.getScheduler();

然后,创建JobDetail的实例,指定执行哪个job。

JobDetail jobDetail1 = JobBuilder.newJob((Class) TestJob.class) //定义Job类为TestJob类.withIdentity("myjob1", "group1") //定义name、group.build();

然后,创建一个CronTrigger实例,指定执行时间。

CronTrigger trigger1 =(CronTrigger) TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0 0 10 ? * MON")) //每週一早上十點執行.build();

最后,将哪个job由哪个trigger触发安排设置进调度程序-任务执行计划表,并启动它。

schedule.scheduleJob(jobDetail1, trigger1);
schedule.start();

至此,一个定时任务就写出来了,真的很简单。
完整代码如下:

public class QuartzLoad {private static Scheduler sched; public static void run() throws Exception { //一個job可以對應多個tigger,但是一個trigger不能對應多個job。System.out.println("啟動定時任務");//创建SchedulerSchedulerFactory sfact = new StdSchedulerFactory();sched = sfact.getScheduler();//每週一早上8點执行任务JobDetail jobDetail1 = JobBuilder.newJob((Class) TestJob.class).withIdentity("myjob1", "group1").build();CronTrigger trigger1 =(CronTrigger) TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0 0 8 ? * MON")) .build();schedule.scheduleJob(jobDetail1, trigger1);schedule.start();}//停止 public static void stop() throws Exception{ sched.shutdown(); }
}

可以先用main方法启动试试,如果是web项目可以用监听器启动。例:


/*** 監聽器**/
public class TimingTaskSchedule implements ServletContextListener{// 服务器启动时执行该事件public void contextInitialized(ServletContextEvent arg0) {try {QuartzLoad.run();} catch (Exception e) {e.printStackTrace();}}// 服务器停止时执行该事件public void contextDestroyed(ServletContextEvent arg0) {try {QuartzLoad.stop();} catch (Exception e) {e.printStackTrace();}}}

Trigger

Quartz提供了多种触发器,比较常用的有 CronTrigger和SimpleTrigger ,创建触发器时的时间表达式怎么写?见这篇博客:点击链接



推荐阅读
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 在Android平台中,播放音频的采样率通常固定为44.1kHz,而录音的采样率则固定为8kHz。为了确保音频设备的正常工作,底层驱动必须预先设定这些固定的采样率。当上层应用提供的采样率与这些预设值不匹配时,需要通过重采样(resample)技术来调整采样率,以保证音频数据的正确处理和传输。本文将详细探讨FFMpeg在音频处理中的基础理论及重采样技术的应用。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 本文深入解析了WCF Binding模型中的绑定元素,详细介绍了信道、信道管理器、信道监听器和信道工厂的概念与作用。从对象创建的角度来看,信道管理器负责信道的生成。具体而言,客户端的信道通过信道工厂进行实例化,而服务端则通过信道监听器来接收请求。文章还探讨了这些组件之间的交互机制及其在WCF通信中的重要性。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • .NET Core 托管服务优化与实践
    在.NET Core应用中,托管服务的形式主要分为进程内托管(InProcess)和进程外托管(OutOfProcess)。这两种托管方式各有优缺点,本文将深入探讨它们的特点,并结合实际案例,介绍如何根据具体需求选择合适的托管模式,以实现性能优化和资源利用的最大化。此外,文章还将分享一些实用的配置技巧和最佳实践,帮助开发者提升应用的稳定性和可维护性。 ... [详细]
  • Silverlight 实战指南:深入解析用户提交数据的验证与捕获机制
    本文深入探讨了Silverlight中用户提交数据的验证与捕获机制,详细分析了四种主要的验证方法:基本异常处理、DataAnnotation注解、IDataErrorInfo客户端同步验证以及自定义验证策略。通过实例解析,帮助开发者更好地理解和应用这些机制,提升应用程序的数据处理能力和用户体验。 ... [详细]
  • 提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射)
    提升视觉效果:Unity3D中的HDR与Bloom技术(高动态范围成像与光线散射) ... [详细]
  • 使用种子数据在Asp.NET Core 3.0 Web API迁移过程中写入数据库的详细步骤
    本文详细阐述了如何在Asp.NET Core 3.0 Web API的迁移过程中利用种子数据将信息写入数据库的具体步骤。对于开发人员而言,掌握这一技术能够显著提高数据初始化的效率和准确性。文章不仅提供了详细的代码示例,还深入解析了每个步骤背后的原理,帮助读者更好地理解和应用这一方法。 ... [详细]
  • ### 优化后的摘要本学习指南旨在帮助读者全面掌握 Bootstrap 前端框架的核心知识点与实战技巧。内容涵盖基础入门、核心功能和高级应用。第一章通过一个简单的“Hello World”示例,介绍 Bootstrap 的基本用法和快速上手方法。第二章深入探讨 Bootstrap 与 JSP 集成的细节,揭示两者结合的优势和应用场景。第三章则进一步讲解 Bootstrap 的高级特性,如响应式设计和组件定制,为开发者提供全方位的技术支持。 ... [详细]
author-avatar
346182773_20da31
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有