【原理、注意点】Quartz的原理和需要注意的地方
基本介绍和核心接口
1.quartz是完全基于java的可用于进行定时任务调度的开源框架,使用的时候需要引入:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
2.核心接口包括:
- Job: 就是要执行的任务,该接口只有一个方法execute(JobExecutionContext jobExecutionContext)方法,Job运行时的信息保存在JobDataMap中(JobDataMap下面介绍)
- JobDetail: 定义Job的实例。接收Job名字、描述以及Job类等信息
- Trigger: 触发Job运行的东西,主要包括四类:SimpleTriger、CronTrigger、DateIntervalTrigger和NthIncludeDayTrigger,目前常用的是前两种
- JobBuilder: 定义和创建JobDetail实例的接口
- TriggerBuilder: 定义和创建Trigger实例的接口
- Scheduler: quartz的运行容器,Trigger和JobDetail可以注册到scheduler中,两者在Scheduler中拥有各自的组及名称(组及名称是Scheduler查找定位容器中某一对象的依据),Trigger和JobDetail的组合名称都必须唯一,但是两者的组和名称可以相同,因为它们是不同类,一个job可以对应多个trigger,但是一个trigger只能对应一个job
注意:
传递给scheduler的是JobDetail而不是Job,JobDetail通过接收到的有关Job的信息,使用反射机制实例化Job,并且每次Job执行完之后,Job class的实例会被丢弃,Jvm的垃圾回收器会将他们回收,所以Job实例实现时,需要注意以下几点:
- 必须具有一个无参构造函数
- 不能有静态数据类型。因为每次job实例执行完之后便被回收,而静态成员变量因为依附于类存在,并不能被回收,如果静态变量的值被某个类修改,它的值就没法被保护
这些接口的关系图如下:
线程
在Quartz中,有两类线程,Shceduler调度线程和任务执行线程,前者包括普通任务调度和Misfire任务调度(Misfire见这里后者需要一个线程池维护,调度图如下:
传递数据
尽管Job类不好定义静态变量,但是可以通过JobDataMap传递数据,JobDataMap是JobDetail的成员变量,可以借助JobDataMap为Job实例提供属性/配置,可以通过它来追踪Job的执行状态等等。对于第一种情况,可以在创建Job时,添加JobDataMap数据,在Job的execute()中获取数据(参见下面simpleTrigger的使用实例)第二种,则可以在Listener中通过获取JobDataMap中存储的状态数据追踪Job的执行状态。
【原理、注意点】Quartz的原理和需要注意的地方的更多相关文章
- 【转】Spring Quartz的原理
Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便. 一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1.Job 表示 ...
- 定时组件quartz系列<二>quartz的原理
Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便. 一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1. ...
- 实现quartz定时器及quartz定时器原理介绍(转)
一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可.1.Job表示一个工作,要执行的具体内容.此接口中只有一个方法void execute(Job ...
- 实现quartz定时器及quartz定时器原理介绍
今天研究定时器,在网上看了一篇不错的文章,推荐给大家! 实现quartz定时器及quartz定时器原理介绍
- 深入解读Quartz的原理
Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便. 一.核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可. 1 ...
- IIS站点工作原理与ASP.NET工作原理
IIS站点工作原理与ASP.NET工作原理 一.IIS IIS 7.0工作原理图 两种模式: 1.用户模式(User Mode)(运行用户的程序代码.限制在特定的范围内活动.有些操作必须要受到Ker ...
- Quartz定时器原理与使用
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,是一个完全由java编写的开源作业调度框架. Quartz可以用来创建简单或为运行十个,百个,甚至是好几 ...
- Quartz技术原理
Quartz运行基本: (1) 创建任务jobDetail(放入具体的jobImpl),触发器trigger(保存job的触发策略),均放入调度器scheduler. (2) ...
- Vue.js双向绑定的实现原理和模板引擎实现原理(##########################################)
Vue.js双向绑定的实现原理 解析 神奇的 Object.defineProperty 这个方法了不起啊..vue.js和avalon.js 都是通过它实现双向绑定的..而且Object.obser ...
随机推荐
- 14. Longest Common Prefix(暴力循环)
Write a function to find the longest common prefix string amongst an array of strings. If there is n ...
- 在统一软件开发过程中使用UML
如何在统一软件开发过程中使用UML? 起始阶段常用UML图 在起始阶段,通常有用例图.类图.活动图.顺序图等UML图的参与. 获取用户需求之后首先要将这些需求转化为系统的顶层用例图. 在确定了用例之后 ...
- Java基础(basis)-----抽象类和接口详解
1.抽象类 1.1 abstract修饰类:抽象类 不可被实例化 抽象类有构造器 (凡是类都有构造器) 抽象方法所在的类,一定是抽象类 抽象类中可以没有抽象方法 1.2 abstract修饰方法:抽象 ...
- QNetworkAccessManager
[1]头文件 想要利用QNetworkAccessManager类,必须在pro文件中添加对应库network,如下: QT += network 如果利用的VS + QT开发环境,请参考随笔< ...
- Spring boot 入门配置
1,maven 的pom 文件里面引入 <!-- spring boot 父节点依赖,引入这个之后相关的引入就不需要添加version配置,spring boot会自动选择最合适的版本进行添加. ...
- 在HUE中将文本格式的数据导入hive数仓中
今天有一个需求需要将一份文档形式的hft与fdd的城市关系关系的数据导入到hive数仓中,之前没有在hue中进行这项操作(上家都是通过xshell登录堡垒机直接连服务器进行操作的),特此记录一下. - ...
- hive的find_in_set函数
集合查找函数: find_in_set语法: find_in_set(string str, string strList) 返回值: int说明: 返回str在strlist第一次出现的位置,str ...
- Android开发常见错误汇总
[错误信息] [2011-01-19 16:39:10 - ApiDemos] WARNING: Application does not specify an API level requireme ...
- [转载]String.Empty、string=”” 和null的区别
String.Empty是string类的一个静态常量: String.Empty和string=””区别不大,因为String.Empty的内部实现是: 1 2 3 4 5 6 7 8 9 10 1 ...
- FAQ About WOYO PDR007 Dent Removal Heat Induction System
WOYO PDR 007 is a dent repair tool for auto maintence. WOYO PDR007 Auto Body Paintless Dent Repair K ...

