一:Quartz是什么

Quartz提供了一些Scheduler(调度策略),以便我们管理和执行Job(任务)。

官网介绍:

Quartz是一个功能丰富、开源的任务调度库,它可以被集成到所有的Java程序,无论是很小的单节点还是规模庞大的商业系统。Quartz可以被用来创建简单或者复杂的调度策略,以执行成千上万的任务。任务一般是指一个标准的Java组件,实际上可以是你写代码指定的任何逻辑。Quartz Scheduler还包括很多企业级的特性,例如JTA事务控制和集群。

二:源码下载

下载地址

三:怎么使用Quartz

大致步骤:

1. 创建SchedulerFactory
2. 创建Scheduler
3. 创建JobDetail
4. 创建Trigger
5. 注册到Scheduler:scheduler.scheduleJob(jobDetail, trigger)
6. 启动Scheduler:scheduler.start()

实例代码

以非集群的RamJob为例

  • RAMJob.java
package org.quartz.entity;import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;import java.util.Date;/*** @author lizhangyu* @date 2022/4/25 11:19*/
public class RAMJob implements Job {@Overridepublic void execute(JobExecutionContext context) throws JobExecutionException {System.out.println("Hello Quartz: " + new Date() + " " + Thread.currentThread().getName());}}
  • RAMJobTest.java
package org.quartz.entity;import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;import java.text.SimpleDateFormat;
import java.util.Date;/*** @author lizhangyu* @date 2022/4/25 11:23*/
public class RAMJobTest {public static void main(String[] args) throws SchedulerException{/*** JobDetail:用来绑定Job,并且在job执行的时候携带一些执行的信息*///创建一个JobDetail实例,将该实例与HelloJob Class绑定JobDetail jobDetail = JobBuilder.newJob(RAMJob.class).withIdentity("rmaJob", "rmaGroup").build();/*** Trigger:用来触发job去执行的,包括定义了什么时候去执行,* 第一次执行,是否会一直重复地执行下去,执行几次等*///创建一个Trigger实例,定义该job立即执行,并且每隔2秒钟重复执行一次,直到程序停止/*** trigger通过builder模式来创建,TriggerBuilder.newTrigger()* withIdentity():定义一个标识符,定义了组* startNow():定义现在开始执行,* withSchedule(SimpleScheduleBuilder.simpleSchedule():withSchedule也是builder模式创建*.withIntervalInSeconds(2).repeatForever()):定义了执行频度:每2秒钟执行一次,不间断地重复执行* build():创建trigger*/Trigger trigger = TriggerBuilder.newTrigger().withIdentity("rmaTrigger", "rmaTriggerGroup").startNow().withSchedule(CronScheduleBuilder.cronSchedule("0/3 * * * * ?")).build();//创建scheduler实例:/*** scheduler区别于trigger和jobDetail,是通过factory模式创建的*///创建一个ScheduleFactorySchedulerFactory sfact = new StdSchedulerFactory();Scheduler scheduler = sfact.getScheduler();scheduler.start();//打印当前时间Date date = new Date();SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println("当前的时间为(HelloScheduler):" + sf.format(date));//需要将jobDetail和trigger传进去,并将jobDetail和trigger绑定在一起。scheduler.scheduleJob(jobDetail, trigger);}
}
  • 程序主要输出
D:\java\jdk1.8\bin\java.exe "-javaagent:D:\idea\IntelliJ IDEA 2018.1.6\lib\idea_rt.jar=60579:D:\idea\IntelliJ IDEA 2018.1.6\bin" -Dfile.encoding=UTF-8 -classpath D:\java\jdk1.8\jre\lib\charsets.jar;D:\java\jdk1.8\jre\lib\deploy.jar;D:\java\jdk1.8\jre\lib\ext\access-bridge-64.jar;D:\java\jdk1.8\jre\lib\ext\cldrdata.jar;D:\java\jdk1.8\jre\lib\ext\dnsns.jar;D:\java\jdk1.8\jre\lib\ext\jaccess.jar;D:\java\jdk1.8\jre\lib\ext\jfxrt.jar;D:\java\jdk1.8\jre\lib\ext\localedata.jar;D:\java\jdk1.8\jre\lib\ext\nashorn.jar;D:\java\jdk1.8\jre\lib\ext\sunec.jar;D:\java\jdk1.8\jre\lib\ext\sunjce_provider.jar;D:\java\jdk1.8\jre\lib\ext\sunmscapi.jar;D:\java\jdk1.8\jre\lib\ext\sunpkcs11.jar;D:\java\jdk1.8\jre\lib\ext\zipfs.jar;D:\java\jdk1.8\jre\lib\javaws.jar;D:\java\jdk1.8\jre\lib\jce.jar;D:\java\jdk1.8\jre\lib\jfr.jar;D:\java\jdk1.8\jre\lib\jfxswt.jar;D:\java\jdk1.8\jre\lib\jsse.jar;D:\java\jdk1.8\jre\lib\management-agent.jar;D:\java\jdk1.8\jre\lib\plugin.jar;D:\java\jdk1.8\jre\lib\resources.jar;D:\java\jdk1.8\jre\lib\rt.jar;F:\idea_resource_code\quartz\quartz-core\target\test-classes;F:\idea_resource_code\quartz\quartz-core\target\classes;D:\Maven\repository\com\mchange\c3p0\0.9.5.5\c3p0-0.9.5.5.jar;D:\Maven\repository\com\mchange\mchange-commons-java\0.2.19\mchange-commons-java-0.2.19.jar;D:\Maven\repository\com\zaxxer\HikariCP\3.4.5\HikariCP-3.4.5.jar;D:\Maven\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\Maven\repository\javax\xml\bind\jaxb-api\2.3.1\jaxb-api-2.3.1.jar;D:\Maven\repository\javax\activation\javax.activation-api\1.2.0\javax.activation-api-1.2.0.jar;D:\Maven\repository\org\apache\openejb\javaee-api\5.0-2\javaee-api-5.0-2.jar;D:\Maven\repository\org\slf4j\slf4j-reload4j\1.7.36\slf4j-reload4j-1.7.36.jar;D:\Maven\repository\ch\qos\reload4j\reload4j\1.2.19\reload4j-1.2.19.jar;D:\Maven\repository\log4j\log4j\1.2.17\log4j-1.2.17.jar;D:\Maven\repository\org\hamcrest\hamcrest-library\1.2\hamcrest-library-1.2.jar;D:\Maven\repository\org\hamcrest\hamcrest-core\1.2\hamcrest-core-1.2.jar;D:\Maven\repository\org\mockito\mockito-all\1.9.5\mockito-all-1.9.5.jar;D:\Maven\repository\junit\junit-dep\4.8.2\junit-dep-4.8.2.jar;D:\Maven\repository\asm\asm\3.2\asm-3.2.jar;D:\Maven\repository\org\apache\derby\derby\10.8.2.2\derby-10.8.2.2.jar;D:\Maven\repository\org\apache\derby\derbynet\10.8.2.2\derbynet-10.8.2.2.jar;D:\Maven\repository\org\apache\derby\derbyclient\10.8.2.2\derbyclient-10.8.2.2.jar org.quartz.entity.RAMJobTest
2022-04-26 22:20:34,724 INFO [org.quartz.impl.StdSchedulerFactory] - Using default implementation for ThreadExecutor
2022-04-26 22:20:34,768 INFO [org.quartz.simpl.SimpleThreadPool] - Job execution threads will use class loader of thread: main
2022-04-26 22:20:34,821 INFO [org.quartz.core.SchedulerSignalerImpl] - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
2022-04-26 22:20:34,821 INFO [org.quartz.core.QuartzScheduler] - Quartz Scheduler v2.4.0-SNAPSHOT created.
2022-04-26 22:20:34,822 INFO [org.quartz.simpl.RAMJobStore] - RAMJobStore initialized.
2022-04-26 22:20:34,832 INFO [org.quartz.core.QuartzScheduler] - Scheduler meta-data: Quartz Scheduler (v2.4.0-SNAPSHOT) 'DefaultQuartzScheduler' with instanceId 'NON_CLUSTERED'Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally.NOT STARTED.Currently in standby mode.Number of jobs executed: 0Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 10 threads.Using job-store 'org.quartz.simpl.RAMJobStore' - which does not support persistence. and is not clustered.2022-04-26 22:20:34,832 INFO [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
2022-04-26 22:20:34,832 INFO [org.quartz.impl.StdSchedulerFactory] - Quartz scheduler version: 2.4.0-SNAPSHOT
2022-04-26 22:20:34,833 INFO [org.quartz.core.QuartzScheduler] - Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
当前的时间为(HelloScheduler):2022-04-26 22:20:34
Hello Quartz: Tue Apr 26 22:20:36 CST 2022 DefaultQuartzScheduler_Worker-1
Hello Quartz: Tue Apr 26 22:20:39 CST 2022 DefaultQuartzScheduler_Worker-2
Hello Quartz: Tue Apr 26 22:20:42 CST 2022 DefaultQuartzScheduler_Worker-3
Hello Quartz: Tue Apr 26 22:20:45 CST 2022 DefaultQuartzScheduler_Worker-4
Hello Quartz: Tue Apr 26 22:20:48 CST 2022 DefaultQuartzScheduler_Worker-5
Hello Quartz: Tue Apr 26 22:20:51 CST 2022 DefaultQuartzScheduler_Worker-6
Hello Quartz: Tue Apr 26 22:20:54 CST 2022 DefaultQuartzScheduler_Worker-7
Hello Quartz: Tue Apr 26 22:20:57 CST 2022 DefaultQuartzScheduler_Worker-8
Hello Quartz: Tue Apr 26 22:21:00 CST 2022 DefaultQuartzScheduler_Worker-9
Hello Quartz: Tue Apr 26 22:21:03 CST 2022 DefaultQuartzScheduler_Worker-10

Quartz 源码解析(一) —— 基本介绍相关推荐

  1. quartz源码解析--转

    quartz源码解析(一)  . http://ssuupv.blog.163.com/blog//146156722013829111028966/ 任何个人.任何企业.任何行业都会有作业调度的需求 ...

  2. jsoncpp库常用源码解析及使用介绍(二)

    上一节介绍了jsoncpp库的下载及编译方式,中Value类中最基础的一部分功能的源码,包括Value的构造形式.重载"=".">"."< ...

  3. 每天一个Lodash源码解析

    每天一个Lodash源码解析 chunk() 方法介绍 自我实现 源码分析 代码对比 知识点补充 浮点数转化为浮点数 数组创建方法区别 js中切割数组方法 slice() 方法介绍 自我实现 源码分析 ...

  4. 【移动开发】Checkout开源库源码解析

    Checkout开源库的源码解析 1.功能介绍 1.1Checkout是什么 Checkout是Android In-App Billing API(v3 +)的一个封装库.In-App Billin ...

  5. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例

    转载自  Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例 第1部分 ArrayList介绍 ArrayList简介 ArrayList 是一个数组队列,相当于 动态数组.与 ...

  6. Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashSet进行学习. 我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet.内容包括: 第1部分 HashSet介绍 第2部分 Has ...

  7. 吊打java面试官之 Hashtable详细介绍(源码解析)和使用示例

    概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习. 我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable. 第1部分 ...

  8. kcp 介绍与源代码分析_KCP-GO源码解析

    原标题:KCP-GO源码解析 原文作者:张伯雨 golang技术社区 概念 ARQ:自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层的错误纠正协议之一. ...

  9. 吊打面试官:Vector详细介绍(源码解析)和使用示例

    概要 学完ArrayList和LinkedList之后,我们接着学习Vector.学习方式还是和之前一样,先对Vector有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. 第1部分 Ve ...

  10. UE 序列化介绍及源码解析

    UE 序列化源码解析 UE 序列化源码解析 UE 序列化源码解析 一 本文的面向对象 二 读完本文应该能获得的收获 三 什么是序列化 四 怎么把数据转化成字节流呢 五 介绍下设计模式中 的访问者模式 ...

最新文章

  1. CSP:CSP认证考试:202109-2(非零段划分)70分答案,Java版
  2. CI持续集成系列之(九)代码发布脚本模板书写
  3. asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法...
  4. Bug只让变量生效一次的思路
  5. POJ 1176 Party Lamps USACO 2.2 派对灯(搜索)
  6. Matlab里evalin和assignin的用法
  7. 图解 Python 算法
  8. Android通知,PendingIntent示例
  9. 豆瓣评分9.2,GitHub 3.3k的学霸笔记终于出书了!获得李宏毅等大佬好评 -- 文末送书...
  10. Gym - 101190D Delight for a Cat
  11. 数据结构基本知识点(二)
  12. PHPCMS2008 二次开发摘要
  13. 离散数学真值表c语言实验报告,NJUPT【离散数学】实验报告
  14. php模拟登陆校园教务网络管理系统
  15. (五)SGE 命令 (1)qsub
  16. ICCV 2021 Oral | 金字塔视觉Transformer(PVT):用于密集预测的多功能backbone
  17. SpringBoot发送html邮箱验证码
  18. excel锁定单元格不能修改_Excel如何保护特定的数据不被更改?
  19. 怎样成为微软认证讲师(MCP)(一)
  20. 深圳商报 | 跨境电商大会聚焦跨境收款难题

热门文章

  1. 猿题库高中同步微博运营策划
  2. 电源压敏电阻的计算选择
  3. Au入门系列之五:轨道与轨道控制​
  4. Opencv 傅立叶变换 傅立叶逆变换
  5. JavaScript中 new 一个对象过程详解
  6. 监控数据恢复取证-盘点进水监控硬盘的数据恢复
  7. 3、圆周运动与椭圆运动
  8. redis mysql 雪崩_Redis雪崩和穿透问题
  9. 天馈系统驻波比概念,产生的原因,问题现象
  10. 大数据驱动教育变革,产教融合呈现新高度——数据科学与大数据技术教育分论坛顺利召开...