为什么80%的码农都做不了架构师?>>>   

Quartz2 
     说白了,就是个功能比较完善的定时器,可以通过指定的时间执行指定的任务。

应用范围

a.比如让商城的活动(对象)在指定的时间(定时)从发布变为激活

b.比如平台每天2:00去给用户发送通知。

c.本来指定商城每天2:00发通知,但是碰到了星期天(触发器)改为1:00发通知

定时器的应用范围其实很广,上面只是简单举了几个例子。

准备

资源下载地址:http://www.quartz-scheduler.org/

    <dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</artifactId><version>2.2.1</version></dependency><dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz-jobs</artifactId><version>2.2.1</version></dependency>

    如上在pom.xml加入要引入的jar包

Quartz中的设计模式

  1. Builder模式

    1. 所有关键组件都有Builder模式来构建  <Builder> 如:JobBuilder、TriggerBuilder

  2. Factory模式

    1. 最终由Scheduler的来进行组合各种组件  <Factory> 如SchedulerFactory

  3. Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义自己的Job、Trigger等组件

  4. 链式写法,Quartz中大量使用链式写法,与jQuery的写法有几分相似,实现也比较简单,如:

    1. $(this).addClass("divCurrColor").next(".divContent").css("display","block");

    2. newTrigger().withIdentity( "trigger3", "group1").startAt( startTime)

      .withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();

框架核心分析

  1. SchedulerFactory    -- 调度程序工厂

    1. ThreadExecutor / DefaultThreadExecutor   -- 内部线程操作对象

    2. StdSchedulerFactory   -- Quartz默认的SchedulerFactory

    3. DirectSchedulerFactory  --   DirectSchedulerFactory是对SchedulerFactory的直接实现,通过它可以直接构建Scheduler、threadpool 等

  2. JobExecutionContext -- JOB上下文,保存着Trigger、 JobDeaitl 等信息,JOB的execute方法传递的参数就是对象的实例

    1. JobExecutionContextImpl

  3. Scheduler    -- 调度器

    1. StdScheduler    -- Quartz默认的Scheduler

    2. RemoteScheduler  -- 带有RMI功能的Scheduler

  4. JOB --任务对象

    1. JobDetail  -- 他是实现轮询的一个的回调类,可将参数封装成JobDataMap对象,Quartz将任务的作业状态保存在JobDetail中.

    2. JobDataMap --  JobDataMap用来报错由JobDetail传递过来的任务实例对象

  5. Trigger

    1. SimpleTrigger <普通的Trigger> --  SimpleScheduleBuilder

    2. CronTrigger  <带Cron Like 表达式的Trigger> -- CronScheduleBuilder

    3. CalendarIntervalTrigger <带日期触发的Trigger> -- CalendarIntervalScheduleBuilder

    4. DailyTimeIntervalTrigger <按天触发的Trigger> -- DailyTimeIntervalScheduleBuilder

  6. ThreadPool  --  为Quartz运行任务时提供了一些线程

    1. SimpleThreadPool  --一个Quartz默认实现的简单线程池,它足够健壮,能够应对大部分常用场景

实现思想:

// 1、工厂模式 构建Scheduler的Factory,其中STD为Quartz默认的Factory
//    开发者亦可自行实现自己的Factory;Job、Trigger等组件  SchedulerFactory sf = new StdSchedulerFactory();  // 2、通过SchedulerFactory构建Scheduler对象  Scheduler sched = sf.getScheduler();  // 3、org.quartz.DateBuilder.evenMinuteDate  -- 通过DateBuilder构建Date  Date runTime = evenMinuteDate( new Date());  // 4、org.quartz.JobBuilder.newJob <下一分钟> --通过JobBuilder构建Job  JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build();  //这里指定的HelloJob.class是job1的实现// 5、通过TriggerBuilder进行构建Trigger
Trigger trigger = newTrigger().withIdentity("trigger1","group1")  .startAt(runTime).build();  // 6、工厂模式,组装各个组件<JOB,Trigger> ---   表示创建sched.scheduleJob (job, trigger);  // 7、start
sched.start();  try {  Thread.sleep(65L * 1000L);
} catch (Exception e) {
}  // 8、通过Scheduler销毁内置的Trigger和Job
sched.shutdown(true);

一句话实现:

   1、创建调度工厂();    //工厂模式

   2、根据工厂取得调度器实例();  //工厂模式

   3、Builder模式构建子组件<Job,Trigger>  // builder模式, 如JobBuilder、TriggerBuilder、DateBuilder

   4、通过调度器组装子组件   调度器.组装<子组件1,子组件2...>  //工厂模式

   5、调度器.start(); //工厂模式

**************************************************************************************************

********来源:http://blog.csdn.net/chenweitang123/article/details/37777399**********

**************************************************************************************************

转载于:https://my.oschina.net/gxiao/blog/551168

Quartz2 定时器 《一》(概述)相关推荐

  1. 51单片机学习笔记之定时器程序设计

    一.定时器/计数器概述 1.相关寄存器 (1)TMOD--方式控制寄存器 GATE C/T M1 M0(T1 T0) GATE=0,定时器/计数器的运行由内部TR0/TR1置1选通: GATE=1,定 ...

  2. STM32-通用定时器-PWM输出

    1  通用定时器PWM概述 1.1 STM32定时器输出通道引脚 这里以TIM3为例来讲解.STM32的通用定时器分为TIM2.TIM3.TIM4.TIM5,而每个定时器都有独立的4个通道可以用来作为 ...

  3. 2022-2028全球与中国定时器市场现状及未来发展趋势

    根据QYR(恒州博智)的统计及预测,2021年全球定时器市场销售额达到了18亿美元,预计2028年将达到20亿美元,年复合增长率(CAGR)为1.3%(2022-2028).地区层面来看,中国市场在过 ...

  4. 24.多线程(等待唤醒机制,volatile,CAS 算法,线程池,定时器,设计模式)

    1.线程间的等待唤醒机制 Object 类中   void wait ()  在其他线程调用此对象的 notify () 方法或 notifyAll () 方法前,导致当前线程等待.         ...

  5. 初学STM32之定时器中断

    初学STM32之定时器中断 一.定时器概述 1.定时器的分类 STM32F10x系列总共最多有8个定时器分为高级定时器,通用定时器和基本定时器.三种定时器的主要区别如下图所示: 本文章仅介绍通用定时器 ...

  6. 【STM32】通用定时器的PWM输出(实例:PWM输出)

    STM32F1xx官方资料: <STM32中文参考手册V10>-第14章  通用定时器 通用定时器PWM概述 STM32定时器输出通道引脚 这里以TIM3为例来讲解.STM32的通用定时器 ...

  7. 蓝桥杯STM32G431学习记录9——基本定时器CubeMX配置及使用

    定时器模块 定时器总体概述 定时器计数方式 复用引脚分配图(可通过此图查阅各个IO口的复用功能并进行配置) 基本定时器 基本定时器TIM6/7内部结构图 基本定时器CubeMX配置 basic_tim ...

  8. 滴答定时器的计数模式_系统滴答定时器

    STM32中的定时器: 内核:SysTick 的系统定时器 定时器的工作原理 如:想要:1ms的定时 时钟源: 72MHz 分频器:72分频 72MHz / 72= 1MHz 1/1M s = 1us ...

  9. (CZ深入浅出Java基础)线程笔记

    这是刘意老师的JAVA基础教程的笔记 讲的贼好,附上传送门 传智风清扬-超全面的Java基础 一.线程的引入 1.多线程概述 进程 a.正在运行的程序,是系统进行资源分类和调用的独立单位. b.每个进 ...

最新文章

  1. 通过pycharm使用git
  2. SDMemoryCache中的NSMapTable
  3. 如何实施异构服务器的负载均衡及过载保护?
  4. javac环境变量配置(转)
  5. 类的继承与sizeof
  6. 视频 | 在小程序竞争激烈的今天,淘票票如何脱颖而出?
  7. 数据结构与算法 | 二叉树四种的遍历方法(递归与非递归)
  8. 解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译)
  9. 2016HUAS暑假集训训练题 F - 简单计算器
  10. 浅析中断——回首两年
  11. 微信点餐 创建订单报外键错误
  12. 06年他预测阿里巴巴会干掉慧聪网,当时所有人都在嘲笑他
  13. Excel格式刷使用技巧
  14. 162-SOP8液晶手写板专用IC
  15. 修改hexo的主题nexT中的Pisces主题宽度
  16. CTF逆向-[GWCTF 2019]babyvm-WP-虚机模拟流程反向编码和z3约束求解器解方程工具的使用
  17. 王祥林 计算机专业英语答案,计算机专业英语 第3版 配套习题 作者 王祥林 陈静姣 模拟试题1.doc...
  18. Android自定义-滑动缩放渐变填充曲线折线图表
  19. mysql grant produce_ERROR 1045 (28000) Mysql中grant 使用不当导致的生产事故
  20. win10周期性卡顿解决

热门文章

  1. 判断listview是上滑还是下滑的方法
  2. Eclipse is running in a JRE, but a JDK is required 解决方法(转)
  3. android调节音量——AudioManager的应用
  4. 代码编写中会遇到的安全性问题
  5. java多线程之wait_(三)java多线程之wait notify notifyAll
  6. 安卓APP_ 控件(9)—— PopupWindow弹窗
  7. 深度相机 物体三维重建_基于深度相机进行室内完整场景三维重建的方法及系统_2017100513665_说明书_专利查询_专利网_钻瓜专利网...
  8. php柱形图 数据sql,ThinkPHP 5.1 读取数据库中的图片
  9. 疲劳容器的定义_材料疲劳
  10. 操作系统:Linux 环境变量配置的 6 种方法!