一、Quartz概述:

Quartz是一个完全由Java编写的开源任务调度的框架,通过触发器设置作业定时运行规则,控制作业的运行时间。其中quartz集群通过故障切换和负载平衡的功能,能给调度器带来高可用性和伸缩性。主要用来执行定时任务,如:定时发送信息、定时生成报表等等

二、相关术语:

三、Quartz的体系结构简介:

Quartz框架主要核心组件包括调度器、触发器、作业。调度器作为作业的总指挥,触发器作为作业的操作者,作业为应用的功能模块。其关系如下图所示

Job为作业的接口,为任务调度的对象;JobDetail用来描述Job的实现类及其它相关的静态信息;Trigger做为作业的定时管理工具,一个Trigger只能对应一个作业实例,而一个作业实例可对应多个触发器;Scheduler做为定时任务容器,是quartz最上层的东西,它提携了所有触发器和作业,使它们协调工作,每个Scheduler都存有JobDetail和Trigger的注册,一个Scheduler中可以注册多个JobDetail和多个Trigger。

1、Job

Job是一个接口,只有一个方法void execute(JobExecutionContext context),被调度的作业(类)需实现该接口中execute()方法,JobExecutionContext类提供了调度上下文的各种信息。每次执行该Job均重新创建一个Job实例,如:

public class DDNJob implements Job{  public void execute(JobExecutionContext arg0) throws JobExecutionException {  perform();  }  public void perform(){ //执行报表统计入口函数    //业务逻辑    System.out.println("自动DDN预授权开始执行-------------执行时间:"+new Date());    }
} 

注:DDNJob类为需要定时执行的类,execute为定时执行的方法。一个定时任务对应一个Job实现类。

2、JobDetail

Quartz在每次执行Job时,都重新创建一个Job实例,所以它不直接接受一个Job的实例,相反它接收一个Job实现类,以便运行时通过newInstance()的反射机制实例化Job。因此需要通过一个类来描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息,JobDetail承担了这一角色。JobDetail 用来保存我们作业的详细信息。一个JobDetail可以有多个Trigger,但是一个Trigger只能对应一个JobDetail,

  JobDetail jobDetail = new JobDetail("myJob","myGroup",DDNJob.class);

说明:    
  myJob:job 名     
  myGroup:job 组(为'null'时,使用缺省的组sched.DEFAULT_GROUP)     
  DDNJob.class:要被执行的Java类

3、Trigger

Trigger是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和 CronTrigger这两个子类。当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择;而CronTrigger则 可以通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00执行,周一、周三、周五下午5:00执行等;Spring中applicationContext.xml配置如下:

SimpleTrigger使用示例:

// Initiate SimpleTrigger with its name and group name
SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger","triggerGroup1");
// set its start up time
simpleTrigger.setStartTime(new Date(System.currentTimeMillis()));
// set the interval, how often the job should run (10 seconds here)
simpleTrigger.setRepeatInterval(10000);
// set the number of execution of this job, set to 10 times.
simpleTrigger.setRepeatCount(10);  

CronTrigger使用示例:

// Initiate CronTrigger with its name and group name
CronTrigger cronTrigger = new CronTrigger("cronTrigger","triggerGroup2");
try {  // setup CronExpression  CronExpression cexp = new CronExpression("0/5 * * * * ?");
// Assign the CronExpression to CronTrigger  cronTrigger.setCronExpression(cexp);
} catch (Exception e) {  e.printStackTrace();
}  

4、Scheduler

Scheduler负责管理Quartz的运行环境,Quartz它是基于多线程架构的,它启动的时候会初始化一套线程,这套线程会用来执行一些预置的作业。Trigger和JobDetail可以注册到Scheduler中;Scheduler可以将Trigger绑定到某一JobDetail中,这样当Trigger触发时,对应的Job就被执行。         Scheduler拥有一个SchedulerContext,它类似于ServletContext,保存着Scheduler上下文信息,Job和Trigger都可以访问SchedulerContext内的信息。Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提高运行效率。 应用示例:

SchedulerFactory schedulerFactory = new StdSchedulerFactory();  // Retrieve a scheduler from schedule factory  Scheduler scheduler = schedulerFactory.getScheduler();  …  // schedule a job with JobDetail and Trigger  scheduler.scheduleJob(jobDetail, simpleTrigger);  // start the scheduler  scheduler.start();  

四、总结:

我们不只有一种两种方法来实现我们的定时任务,就我知道的出了我们的quartz框架之外,我们spring也自己封装有自己的定时器,再加上各种开源的插件。那我工作的公司来说,我们用windows服务来完成这个定时任务,万变不离其宗,理解了他们的原理以及精髓,我们就可以去创新,去写出符合自己要求的工具了

Quartz框架介绍相关推荐

  1. Quartz框架实现定时任务介绍及简单使用

    https://blog.csdn.net/bicheng4769/article/details/81097305 Quartz框架介绍及简单使用 https://www.cnblogs.com/d ...

  2. Quartz 框架快速入门(二)

    尽可能的用声明式处理软件配置,其次才考虑编程式的方式.在上一篇<Quartz 框架快速入门(一)>中,如果我们要在 Job 启动之后改变它的执行时间和频度,必须去修改源代码重新编译.这种方 ...

  3. Quartz框架多个trigger任务执行出现漏执行的问题分析--转

    原文地址:http://blog.csdn.net/dailywater/article/details/51470779 一.问题描述  使用Quartz配置定时任务,配置了超过10个定时任务,这些 ...

  4. Quartz 框架快速入门(三)

    在前面两篇文章中简单介绍了在java应用程序中如何使用Quartz框架,这一篇中我们将看到如何在web环境下通过配置文件来完成Quartz的后台作业调度,而不必手工去创建Trigger和Schedul ...

  5. SpringBoot与quartz框架实现分布式定时任务

    前言 quartz的分布式调度策略是以数据库为边界资源的一种异步策略.各个调度器都遵守一个基于数据库锁的操作规则从而保证了操作的唯一性. 在quartz的集群解决方案里有张表scheduler_loc ...

  6. 《企业级ios应用开发实战》一2.2 iOS框架介绍

    2.2 iOS框架介绍 iOS衍生自Mac OS X的成熟内核,但iOS操作系统更紧凑和高效,支持iPhone和iPod Touch的硬件.iOS继承了Mac OS X的风格,包括:统一的OS X 内 ...

  7. Quartz框架应用(1)

    为什么80%的码农都做不了架构师?>>>    在你使用调度器之前,需要借助一些具体的例子去理解. 你可以使用SchedulerFactory类来达到程序调度的目的. 有一些Quar ...

  8. iOS 常用框架介绍

    iOS框架介绍      Cocoa Touch GameKit  实现对游戏中心的支持,让用户能够在线共享他们的游戏相关的信息  iOS设备之间蓝牙数据传输   从iOS7开始过期   局域网游戏 ...

  9. .Net Core 分布式微服务框架介绍 - Jimu

    .Net Core 分布式微服务框架介绍 - Jimu 系列文章 [原文] .Net Core 分布式微服务框架介绍 - Jimu [原文] .Net Core 分布式微服务框架 - Jimu 添加 ...

最新文章

  1. 新的理念、 新的解决方案、 新的Azure Stack技术预览
  2. Uber发布了Ludwig,一款不使用代码的人工智能开发工具
  3. 四款 5G 版 iPhone 12 齐发,支持北斗系统,你准备好了吗?
  4. pycharm更改模板_pycharm怎样给文件编辑统一的模板?
  5. overload override
  6. 性能测试三十九:Jprofiler分析CPU过高和响应时间长的问题
  7. 首次公开开源PolarDB的总体结构设计和企业级特性
  8. 前端学习(1844):前端面试题之vue的mvvm
  9. C语言open()函数:打开文件函数(转)
  10. 以LORA网关构建的智慧养殖方案
  11. vue结合videojs实现视频播放组件
  12. Android 利用adb命令 使App自动点击屏幕指定位置
  13. 这位智商奇高的超级天才去了:他简直活出了别人八辈子的精彩!
  14. 怎么看服务器硬盘数据信息,如何查看服务器的硬盘数量
  15. 【Python】制作圆角图像的两种方案对比
  16. vue打开外部页面_vue项目中嵌套外部网页
  17. MySQL中的cast()函数用法
  18. Quality control of sequencing data
  19. 165体重_女生165cm标准体重
  20. 第十一届蓝桥杯大赛软件类省赛第二场 C/C++ 大学 B 组

热门文章

  1. 什么是真正的格局?遇到烂人不计较,碰到破事别纠缠
  2. Python控制Excel表格的操作以及问题处理
  3. Seaborn调色板设置
  4. 30分钟扫描一亿行代码库,bug漏洞都能找,这款Facebook神器黑粉都赞叹不已
  5. 应用交付工程师应该具备的关键能力(售前篇)
  6. linux xmanager 网络端口 177,通过xmanager连接linux系统
  7. SQL server如何自定义服务器名称登陆
  8. 舒老师AK的hu测 T2. LX还在迷路(线段树+等差数列)
  9. 一个月收入 3000 的人,指导一个月收入 30000 的人去投资,你可以无视了……
  10. 2020-05-13