Quartz简介,java编程思想第四版pdf百度云
Quartz是免费使用的,并根据Apache 2.0许可获得许可。
Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现。该项目于 2009 年被 Terracotta 收购,目前是 Terracotta 旗下的一个项目。官网地址:http://www.quartz-scheduler.org/
使用场景
持久性任务 - 就是保持调度定时的状态;
任务管理 - 对调度任务进行有效的管理;
当遇到以下问题时:
自动关闭30分钟未支付的订单
与第三方公司对账业务
数据统计,比如博客系统统计日粉丝数,日阅读量等
活动开始和结束通知;
想在每月25号,自动还款;
每周或者每月的提醒事项,比如周总结或者月总结;
像这种某个时间点执行任务,或者每隔一段时间重复执行任务,都可以用Quartz实现
特点
强大的调度功能,例如丰富多样的调度方法,可以满足各种常规和特殊需求;
灵活的应用方式,例如支持任务调度和任务的多种组合,支持调度数据的多种存储方式(DB,RAM等);
支持分布式集群,在被Terracotta收购之后,在原来基础上进行了进一步的改造。
Quartz 使用的设计模式
Builder模式
组件模式
Factory模式
Java 语言实现定时任务的几种方式
java.util.Timer:一个 JDK 中自带的处理简单定时任务的工具。
java.util.concurrent.ScheduledExecutorService:JDK 中的定时任务接口,可以将定时任务与线程池功能结合使用。
org.springframework.scheduling.annotation.Scheduled:Spring 框架中基于注解来实现定时任务处理。
Quartz:一个完全由 Java 语言编写的,支持分布式调度任务的开源框架。
核心元素
Quartz任务调度的核心元素主要有:Scheduler任务调度器、Trigger触发器、Job任务、JobDetail调度程序。其中trigger和job、jobDetail为任务调度的元数据,而Scheduler为实际执行调度的控制器。
Scheduler
任务调度器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。正常情况下一个应用只需要一个Scheduler对象。
Scheduler 由 SchedulerFactory 创建:DirectSchedulerFactory或者StdSchedulerFactory。第二种工厂StdSchedulerFactory使用较多,因为DirectSchedulerFactory使用起来不够方便,需要作许多详细的手工编码设置。Scheduler主要有三种:RemoteMBeanScheduler,RemoteScheduler和StdScheduler。
Trigger
触发器,调度任务的时间规则。Quartz中主要提供了四种类型的Trigger:SimpleTrigger,CronTirgger,DateIntervalTrigger,和NthIncludedDayTrigger。这四种trigger可以满足企业应用中的绝大部分需求。
Calendar
一些日历特定时间点的集合。一个trigger可以包含多个Calendar,以便排除或包含某些时间点。
JobDetail
JobDetail是一个具体的可执行的调度程序,Job是这个可执行调度程序所要执行的内容,另外JobDetail还包含了任务调度的方案和策略。
JobDetail绑定指定的Job,每次Scheduler调度执行一个Job的时候,首先会拿到对应的Job,然后创建该Job实例,再去执行Job中的execute()的内容,任务执行结束后,关联的Job对象实例会被释放,且会被JVM GC清除。
为什么设计成JobDetail + Job,不直接使用Job
JobDetail定义的是任务数据,而真正的执行逻辑是在Job中。
这是因为任务是有可能并发执行,如果Scheduler直接使用Job,就会存在对同一个Job实例并发访问的问题。而 JobDetail 绑定 Job 方式,Sheduler每次执行,都会根据JobDetail创建一个新的Job实例,这样就可以规避并发访问的问题。
Job
任务,表示要执行的具体工作或者被调度的任务。我们的任务类实现该接口,重写execute方法来定义任务的执行逻辑。主要有两种类型的job:无状态的(stateless)和有状态的(stateful)。对于同一个trigger来说,有状态的job不能被并行执行,只有上一次触发的任务被执行完之后,才能触发下一次执行。Job主要有两种属性:volatility和durability,其中volatility表示任务是否被持久化到数据库存储,而durability表示在没有trigger关联的时候任务是否被保留。两者都是在值为true的时候任务被持久化或保留。一个job可以被多个trigger关联,但是一个trigger只能关联一个job。
JobExecutionContext
JobExecutionContext中包含了Quartz运行时的环境以及Job本身的详细数据信息。
当Schedule调度执行一个Job的时候,就会将JobExecutionContext传递给该Job的execute()中,Job就可以通过JobExecutionContext对象获取信息。
核心元素之间的关系
Quartz 类图
主要线程
在Quartz中,有两类线程,也即执行线程和调度线程,其中执行任务的线程通常用一个线程池维护。线程间关系如下图
在quartz中,Scheduler调度线程主要有两个:regular Scheduler Thread(执行常规调度)和Misfire Scheduler Thread(执行错失的任务)。其中Regular Thread 轮询Trigger,如果有将要触发的Trigger,则从任务线程池中获取一个空闲线程,然后执行与Trigg
《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》
【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享
er关联的job;Misfire Thraed则是扫描所有的trigger,查看是否有错失的,如果有的话,根据一定的策略进行处理。
数据存储
Quartz中的trigger和job需要存储下来才能被使用。Quartz中有两种存储方式:RAMJobStore,JobStoreSupport,其中RAMJobStore是将trigger和job存储在内存中,而JobStoreSupport是基于jdbc将trigger和job存储到数据库中。RAMJobStore的存取速度非常快,但是由于其在系统被停止后所有的数据都会丢失,所以在集群应用中,必须使用JobStoreSupport。
注意:quartz集群是通过数据库表来感知其他的应用的,各个节点之间并没有直接的通信。只有使用持久的JobStore才能完成Quartz集群。
quartz的sql所在位置
1、/docs/dbTables
2、org/quartz/impl/jdbcjobstore
其中表结构
Quartz简介,java编程思想第四版pdf百度云相关推荐
- Java编程思想第四版——第十五天
2012-04-23 121-131/913 Java编程思想第四版--第十五天 5.5.3 终结条件 通常不能指望finalize(),必须创建其他的"清理"方法,并明确的调用它 ...
- Java编程思想第四版学习总结
Java编程思想第四版学习总结 文章目录 Java编程思想第四版学习总结 第 1 章 对象入门 1.1 抽象的进步 1.2 对象的接口 1.3 实现方案的隐藏 1.4 方案的重复使用 1.5 继承:重 ...
- Java编程思想 第四版 读书笔记巩固基础,完善知识框架。
Java编程思想读书笔记 此笔记仅仅是作者的阅读此书时,发现自己错误认识和不牢固的知识,用来完善作者的知识框架,其列出重点不具有参考性,代码也是为了省工作量,简写代码,能看懂即可,语法并不规范 第一章 ...
- Java编程思想第四版第九章练习
这一章讲的是接口, 其中抽象和C++中的纯虚函数特别相似,我会在Java编程思想专栏做完以后,专门写一篇文章来对比C++和Java的不同. 1.修改第8章练习9中的Rodent,使其成为一个抽象类.只 ...
- Thinking in Java 4th(Java编程思想第四版)文档、源码、习题答案
Thinking in Java 4th 中.英文两版pdf文档,书中源码及课后习题答案.链接:https://pan.baidu.com/s/1BKJdtgJ3s-_rN1OB4rpLTQ 密码:2 ...
- Thinking in Java,Fourth Edition(Java 编程思想,第四版)学习笔记(二)之Introduction to Objects...
The genesis of the computer revolution was a machine. The genesis of out programming languages thus ...
- java编程思想第四版第十四章 类型信息习题
fda dfa 第三题u package net.mindview.typeinfo.test4;import java.util.ArrayList; import java.util.Arrays ...
- Java编程思想第四版第四章练习
我正在读C++prime第六版,然后正好学到这个章节,简直太一致了吧. 闲话少说,直接上题.PS:编译器如期而至IDEA,熟悉了好久的编译系统,安装教程请看上一篇博客. 1.写一个程序,打印从1到10 ...
- java编程思想第四版第三章要点习题
使用"简短的" 和正常的 打印语句来编写一个程序 package net.mindview.util;public class Print {/*** 不带有回车* @param ...
最新文章
- 代码逻辑是分方法写好 还是在一个方法写好_这一团糟的代码,真的是我写的吗?...
- Feign客户端 - 超时时间配置
- 【CDS技术揭秘系列 01】阿里云CDS-OSS容灾大揭秘
- 前辈学习C语言的四种方法,实际上不管学什么语言,都行之有效!
- oracle 创建表空间 pcincrease,oracle建表空间
- PyTorch中“CUDA out of memory”的调试笔记
- 1061. 判断题(15)-PAT乙级真题
- python正则匹配11个数字_Python正则表达式匹配字符串中的数字
- SAL Annotations的介绍
- 在Mac OS X中使用VIM开发STM32(2)
- 大数据要如何提高 才能满足智慧城市需求?
- 一个初学者的辛酸路程-Python基础-3
- 英语翻译软件测试简历,如此翻译-2 - Victor's Testing Career - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
- ACM 国际大学生程序设计竞赛简介
- 数据库所有者 (dbo)
- 空降过来的男领导如何管理女性团队?我的一些实操技巧
- 《 指数基金投资指南 》by 银行螺丝钉 - 笔记 - 1、2章
- 制作Windows PE启动镜像命令
- 互联网技术架构——画龙点睛
- 【python】用turtle画七巧板