Quartz2 定时器 《一》(概述)
为什么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中的设计模式
Builder模式
所有关键组件都有Builder模式来构建 <Builder> 如:JobBuilder、TriggerBuilder
Factory模式
最终由Scheduler的来进行组合各种组件 <Factory> 如SchedulerFactory
Quartz项目中大量使用组件模式,插件式设计,可插拔,耦合性低,易扩展,开发者可自行定义自己的Job、Trigger等组件
链式写法,Quartz中大量使用链式写法,与jQuery的写法有几分相似,实现也比较简单,如:
$(this).addClass("divCurrColor").next(".divContent").css("display","block");
newTrigger().withIdentity( "trigger3", "group1").startAt( startTime)
.withSchedule(simpleSchedule().withIntervalInSeconds(10).withRepeatCount(10)).build();
框架核心分析
SchedulerFactory -- 调度程序工厂
ThreadExecutor / DefaultThreadExecutor -- 内部线程操作对象
StdSchedulerFactory -- Quartz默认的SchedulerFactory
DirectSchedulerFactory -- DirectSchedulerFactory是对SchedulerFactory的直接实现,通过它可以直接构建Scheduler、threadpool 等
JobExecutionContext -- JOB上下文,保存着Trigger、 JobDeaitl 等信息,JOB的execute方法传递的参数就是对象的实例
JobExecutionContextImpl
Scheduler -- 调度器
StdScheduler -- Quartz默认的Scheduler
RemoteScheduler -- 带有RMI功能的Scheduler
JOB --任务对象
JobDetail -- 他是实现轮询的一个的回调类,可将参数封装成JobDataMap对象,Quartz将任务的作业状态保存在JobDetail中.
JobDataMap -- JobDataMap用来报错由JobDetail传递过来的任务实例对象
Trigger
SimpleTrigger <普通的Trigger> -- SimpleScheduleBuilder
CronTrigger <带Cron Like 表达式的Trigger> -- CronScheduleBuilder
CalendarIntervalTrigger <带日期触发的Trigger> -- CalendarIntervalScheduleBuilder
DailyTimeIntervalTrigger <按天触发的Trigger> -- DailyTimeIntervalScheduleBuilder
ThreadPool -- 为Quartz运行任务时提供了一些线程
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 定时器 《一》(概述)相关推荐
- 51单片机学习笔记之定时器程序设计
一.定时器/计数器概述 1.相关寄存器 (1)TMOD--方式控制寄存器 GATE C/T M1 M0(T1 T0) GATE=0,定时器/计数器的运行由内部TR0/TR1置1选通: GATE=1,定 ...
- STM32-通用定时器-PWM输出
1 通用定时器PWM概述 1.1 STM32定时器输出通道引脚 这里以TIM3为例来讲解.STM32的通用定时器分为TIM2.TIM3.TIM4.TIM5,而每个定时器都有独立的4个通道可以用来作为 ...
- 2022-2028全球与中国定时器市场现状及未来发展趋势
根据QYR(恒州博智)的统计及预测,2021年全球定时器市场销售额达到了18亿美元,预计2028年将达到20亿美元,年复合增长率(CAGR)为1.3%(2022-2028).地区层面来看,中国市场在过 ...
- 24.多线程(等待唤醒机制,volatile,CAS 算法,线程池,定时器,设计模式)
1.线程间的等待唤醒机制 Object 类中 void wait () 在其他线程调用此对象的 notify () 方法或 notifyAll () 方法前,导致当前线程等待. ...
- 初学STM32之定时器中断
初学STM32之定时器中断 一.定时器概述 1.定时器的分类 STM32F10x系列总共最多有8个定时器分为高级定时器,通用定时器和基本定时器.三种定时器的主要区别如下图所示: 本文章仅介绍通用定时器 ...
- 【STM32】通用定时器的PWM输出(实例:PWM输出)
STM32F1xx官方资料: <STM32中文参考手册V10>-第14章 通用定时器 通用定时器PWM概述 STM32定时器输出通道引脚 这里以TIM3为例来讲解.STM32的通用定时器 ...
- 蓝桥杯STM32G431学习记录9——基本定时器CubeMX配置及使用
定时器模块 定时器总体概述 定时器计数方式 复用引脚分配图(可通过此图查阅各个IO口的复用功能并进行配置) 基本定时器 基本定时器TIM6/7内部结构图 基本定时器CubeMX配置 basic_tim ...
- 滴答定时器的计数模式_系统滴答定时器
STM32中的定时器: 内核:SysTick 的系统定时器 定时器的工作原理 如:想要:1ms的定时 时钟源: 72MHz 分频器:72分频 72MHz / 72= 1MHz 1/1M s = 1us ...
- (CZ深入浅出Java基础)线程笔记
这是刘意老师的JAVA基础教程的笔记 讲的贼好,附上传送门 传智风清扬-超全面的Java基础 一.线程的引入 1.多线程概述 进程 a.正在运行的程序,是系统进行资源分类和调用的独立单位. b.每个进 ...
最新文章
- 通过pycharm使用git
- SDMemoryCache中的NSMapTable
- 如何实施异构服务器的负载均衡及过载保护?
- javac环境变量配置(转)
- 类的继承与sizeof
- 视频 | 在小程序竞争激烈的今天,淘票票如何脱颖而出?
- 数据结构与算法 | 二叉树四种的遍历方法(递归与非递归)
- 解剖SQLSERVER 第八篇 OrcaMDF 现在支持多数据文件的数据库(译)
- 2016HUAS暑假集训训练题 F - 简单计算器
- 浅析中断——回首两年
- 微信点餐 创建订单报外键错误
- 06年他预测阿里巴巴会干掉慧聪网,当时所有人都在嘲笑他
- Excel格式刷使用技巧
- 162-SOP8液晶手写板专用IC
- 修改hexo的主题nexT中的Pisces主题宽度
- CTF逆向-[GWCTF 2019]babyvm-WP-虚机模拟流程反向编码和z3约束求解器解方程工具的使用
- 王祥林 计算机专业英语答案,计算机专业英语 第3版 配套习题 作者 王祥林 陈静姣 模拟试题1.doc...
- Android自定义-滑动缩放渐变填充曲线折线图表
- mysql grant produce_ERROR 1045 (28000) Mysql中grant 使用不当导致的生产事故
- win10周期性卡顿解决
热门文章
- 判断listview是上滑还是下滑的方法
- Eclipse is running in a JRE, but a JDK is required 解决方法(转)
- android调节音量——AudioManager的应用
- 代码编写中会遇到的安全性问题
- java多线程之wait_(三)java多线程之wait notify notifyAll
- 安卓APP_ 控件(9)—— PopupWindow弹窗
- 深度相机 物体三维重建_基于深度相机进行室内完整场景三维重建的方法及系统_2017100513665_说明书_专利查询_专利网_钻瓜专利网...
- php柱形图 数据sql,ThinkPHP 5.1 读取数据库中的图片
- 疲劳容器的定义_材料疲劳
- 操作系统:Linux 环境变量配置的 6 种方法!