




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Quartz定时器 综合软件开发三部连勇 2 Quartz是什么Quartz能干什么EasyexampleQuartz框架分析项目开发 3 Quartz是什么 Quartz是OpenSymphony开源组织在Jobscheduling领域又一个开源项目 它可以与J2EE与J2SE应用程序相结合也可以单独使用 Quartz可以用来创建简单或为运行十个 百个 甚至是好几万个Jobs这样复杂的日程序表 Jobs可以做成标准的Java组件或EJBs Quartz是一个任务日程管理系统 一个在预先确定 被纳入日程 的时间到达时 负责执行 或者通知 其他软件组件的系统 Quartz用一个小Java库发布文件 jar文件 这个库文件包含了所有Quartz核心功能 这些功能的主要接口 API 是Scheduler接口 它提供了简单的操作 例如 将任务纳入日程或者从日程中取消 开始 停止 暂停日程进度 4 Quartz能干什么 场景 1 下载交易流水从银行下载当日交易流水场景 2 邮件提醒和告警公司出于安全考虑 让每个员工三个月换一次邮箱密码 这种情况下 可以创建一个作业 让它每天午夜运行一次 并且向离过期时间不到三天的所有用户发邮件提醒 这里可以恰到好处的用到作业调度器 图1 1描绘了密码这个提醒作业 图1 1密码过期的作业每晚发送邮件给密码很快会过期的用户 5 Easyexample FirstwemustgetareferencetoaschedulerSchedulerFactorysf newStdSchedulerFactory Schedulersched sf getScheduler computeratimethatisonthenextroundminuteDaterunTime TriggerUtils getEvenMinuteDate newDate definethejobandtieittoourHelloJobclassJobDetailjob newJobDetail job1 group1 HelloJob class TriggerthejobtorunonthenextroundminuteTriggertrigger newSimpleTrigger trigger1 group1 runTime Tellquartztoschedulethejobusingourtriggersched scheduleJob job trigger Startuptheschedulersched start 6 下载 下载 http www quartz scheduler org download index htmldocs wikidocsQuartz的帮助文件docs apiQuartz框架的JavaDocApi说明文档ExamplesQuartz的例子LibQuartz使用到的第三方包src源码 7 Quartz框架分析 核心接口SchedulerJobJobDetailTriggerJobDataMap 8 Scheduler 调度器 ASchedulermaintainsaregisteryoforg quartz JobDetailsandTriggers Onceregistered theSchedulerisresponibleforexecutingJobswhentheirassociatedTriggersfire whentheirscheduledtimearrives voidaddJob JobDetailjobDetail booleanreplace throwsSchedulerException DatescheduleJob Triggertrigger throwsSchedulerException DatescheduleJob JobDetailjobDetail Triggertrigger throwsSchedulerException DaterescheduleJob StringtriggerName StringgroupName TriggernewTrigger throwsSchedulerException 9 Scheduler 调度器 客服端与调度器交互是通过org quartz Scheduler接口的 这个Scheduler的实现 实际上是一个代理 对其中方法调用会传递到QuartzScheduler实例上 QuartzScheduler处在框架根的位置 它是一个引擎驱动着整个框架 Quartz相当灵活和可配置 许多重要的功能由分离的组件和子框架实现 所以并非所有的功能都直接内建到QuartzScheduler 这就意味着用户可以用自己某个关键特征实现来替换原有默认实现 10 Scheduler实例化 使用scheduler之前应首先实例化它 使用SchedulerFactory可以完成scheduler的实例化 org quartz impl DirectoSchedulerFactoryorg quartz impl StdSchedulerFactoryStdSchedulerFactory会加载类路径下的quartz properties文件 quartz properties 允许你修改框架运行时环境 缺省是使用Quartz jar里面的quartz properties文件 当然 你应该创建一个quartz properties文件的副本并且把它放入你工程的classes目录中以便类装载器找到它 11 Scheduler启动关闭 一旦一个scheduler被实例化 它就可以被启动 start 并且处于驻留模式 直到被关闭 shutdown 注意 一旦scheduler被关闭 shutdown 则它不能再重新启动 除非重新实例化它 除非scheduler被启动并且不处于暂停状态 否则触发器不会被触发 任务也不能被执行 voidstart throwsSchedulerException voidstartDelayed intseconds throwsSchedulerException voidshutdown throwsSchedulerException voidshutdown booleanwaitForJobsToComplete throwsSchedulerException 12 Job 作业是一个执行任务的简单java类 任务可以是任何java代码 只需你实现org quartz Job接口 当Quartz确定该是作业运行的时候 它将调用你的作业 Quartz提供了一个机制来建立具有不同粒度的 可重复的调度表 于是 你只需创建一个java类 这个类被调用而执行任务 publicinterfaceJob voidexecute JobExecutionContextcontext throwsJobExecutionException 13 JobDetail JobDetail对象由Quartz客户端在Job被加入到scheduler时创建 它包含了Job的各种设置属性以及一个JobDataMap对象 这个对象被用来存储给定Job类实例的状态信息 Scheduler并不保存真正的JobClass 而是通过JobDetail来保存 注意 我们给scheduler传入了一个JobDetail实例 而且这个JobDetail实例只是简单提供了类名来引用被执行的Job 每次scheduler执行这个任务时 它就创建这个类的新实例 然后调用该实例的execute 方法 Job不必担心线程安全性 因为同一时刻仅有一个线程去执行给定Job类的实例 甚至是并发执行同一Job也是如此 推断 Job类必须有一个无参数的构造函数Job类中定义的成员数据失去意义 因为这些成员数据值在每次执行的时候被 清空 了 14 JobFactory JobFactory控制job的实例化JobnewJob TriggerFiredBundlebundle throwsSchedulerException 默认的JobFactory是org quartz simpl SimpleJobFactory 缺省的JobFactory只是简单地对Job类调用newInstance 方法 设置JobFactory Scheduler setJobFactory factory 配置quartz properties的org quartz scheduler jobFactory class属性设置jobFactory的类型 15 JobDataMap JobDataMap被用来保存一系列的 序列化的 对象 这些对象在Job执行时可以得到 JobDataMap是JavaMap接口的一个实现 而且还增加了一些存储和读取主类型数据的便捷方法 JobDetail getJobDataMap put jobSays HelloWorld JobExecutionContext getJobDetail getJobDataMap Trigger getJobDataMap JobExecutionContext getMergedJobDataMap 16 StatefulJob有状态任务 任务在执行任务过程中 任何对JobDataMap所作的更改都将丢失而且任务下次执行时也无法看到 StatefulJob在任务的每次执行之后重新存储JobDataMapJobvs StatefulJobJobDataMap在每次执行之后重新持久化到JobStore中 两个或多个有状态的JobDetail实例不能并发执行 17 Trigger Trigger对象被用来触发jobs的执行 你希望将任务纳入到进度 要实例化一个Trigger并且 调整 它的属性以满足你想要的进度安排 Triggers也有一个JobDataMap与之关联 这非常有利于向触发器所触发的Job传递参数 Quartz打包了很多不同类型的Trigger 但最常用的Trigger类是SimpleTrigger和CronTrigger 18 SimpleTrigger SimpleTrigger用来触发只需执行一次或者在给定时间触发并且重复N次且每次执行延迟一定时间的任务 如果你想让触发器在2010年1月11日 上午11 23 54秒执行 然后每个隔10秒钟重复执行一次 并且这样重复5次 那么SimpleTrigger就可以满足你的要求 publicSimpleTrigger Stringname Stringgroup StringjobName StringjobGroup DatestartTime DateendTime intrepeatCount longrepeatInterval 19 CronTrigger 如果你需要像日历那样按日程来触发任务 而不是像SimpleTrigger那样每隔特定的间隔时间触发 CronTriggers通常比SimpleTrigger更有用 使用CronTrigger 你可以指定诸如 每个周五中午 或者 每个工作日的9 30 或者 从每个周一 周三 周五的上午9 00到上午10 00之间每隔五分钟 这样日程安排来触发 甚至 象SimpleTrigger一样 CronTrigger也有一个startTime以指定日程从什么时候开始 也有一个 可选的 endTime以指定何时日程不再继续 publicCronTrigger Stringname Stringgroup StringjobName StringjobGroup DatestartTime DateendTime StringcronExpression TimeZonetimeZone throwsParseException 20 CronExpressions Cron表达式被用来配置CronTrigger实例 Cron表达式是一个由7个子表达式组成的字符串 每个子表达式都描述了一个单独的日程细节 这些子表达式用空格分隔 分别表示 Seconds秒Minutes分钟Hours小时Day of Month月中的天Month月Day of Week周中的天Year optionalfield 年 21 TriggerUtils TriggerUtils提供了许多便捷的方法简化了构造和配置trigger publicstaticTriggermakeSecondlyTrigger intintervalInSeconds publicstaticTriggermakeDailyTrigger inthour intminute publicstaticTriggermakeWeeklyTrigger intdayOfWeek inthour intminute publicstaticTriggermakeMonthlyTrigger intdayOfMonth inthour intminute publicstaticDategetNextGivenMinuteDate Datedate intminuteBase publicstaticDategetEvenMinuteDate Datedate 22 JobStore作业存储 Quartz提供两种基本作业存储类型 第一种类型叫做RAMJobStore 它利用通常的内存来持久化调度程序信息 这种作业存储类型最容易配置 构造和运行 对许多应用来说 这种作业存储已经足够了 然而 因为调度程序信息是存储在被分配给JVM的内存里面 所以 当应用程序停止运行时 所有调度信息将被丢失 如果你需要在重新启动之间持久化调度信息 则将需要第二种类型的作业存储 第二种类型的作业存储实际上提供两种不同的实现 但两种实现一般都称为JDBC作业存储 两种JDBC作业存储都需要JDBC驱动程序和后台数据库来持久化调度程序信息 这两种类型的不同在于你是否想要控制数据库事务或这释放控制给应用服务器例如BEA sWebLogic或Jboss org quartz impl jdbcjobstore JobStoreTXorg quartz impl jdbcjobstore JobStoreCMT 23 TriggerListeners和JobListeners 监听器是在scheduler事件发生时能够执行动作的对象 可以看出 TriggerListeners接收与triggers相关的事件 而JobListeners则接收与Job相关的事件 创建监听器很简单 创建一个实现TriggerListener或JobListener的接口 监听器然后在执行的时候注册到scheduler中 而且必须给定一个名字 或者 它们必须通过他们的getName 方法来介绍自己 监听器可以被注册为 全局 的或者 非全局 全局 监听器接收所有triggers jobs产生的事件 而 非全局 监听器只接受那些显式指定监听器名的triggers jobs所产生的事件 SchedulerListeners只接收与特定trigger或job无关的Scheduler自身事件通知 24 SchedulerPlugin Quartz提供了一个接口 org quartz spi SchedulerPlugin 来插入附加的功能 随Quartz打包儿来的插件有很多有用的功能 它们在org quartz plugins包中找到 他们提供了诸如自动安排任务的日程 将任务和触发器事件的历史记入日志以及J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 光学软件测试题及答案
- 美术培训讲座
- 2025年 阜阳临泉城关街道桃花源幼儿园教师招聘考试笔试试卷附答案
- 2025年 北京公务员考试笔试考试试卷附答案
- 2025年主题团日活动策划与实施
- 小学交通教育课件
- 左膝关节置换术后护理
- 2025年中国墨西哥胡椒盐行业市场全景分析及前景机遇研判报告
- 子宫畸形超声分类及诊断
- 支气管肺炎相关疾病知识
- 《大学英语》课件-UNIT 3 In the workplace
- 路灯安全生产培训
- 疑难病例讨论制度流程
- 痛经课件完整版本
- 2025高考数学考点巩固卷01集合与常用逻辑用语(7大考点)【含答案】
- 广西南宁市(2024年-2025年小学六年级语文)统编版小升初真题((上下)学期)试卷及答案
- 旅游景区管理制度完整汇编
- 人教小学英语一起点新起点sl版6上 单元知识点归纳总结
- 《毛泽东思想和中国特色社会主义理论体系概论》微课之课件-1.2.2毛泽东思想活的灵魂
- 钙化性冈上肌腱炎病因介绍
- UL1561标准中文版-2019变压器UL中文版标准
评论
0/150
提交评论