分布式调度框架quartz

上传人:亦*** 文档编号:293956836 上传时间:2022-05-18 格式:DOCX 页数:40 大小:151.61KB
返回 下载 相关 举报
分布式调度框架quartz_第1页
第1页 / 共40页
分布式调度框架quartz_第2页
第2页 / 共40页
分布式调度框架quartz_第3页
第3页 / 共40页
分布式调度框架quartz_第4页
第4页 / 共40页
分布式调度框架quartz_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《分布式调度框架quartz》由会员分享,可在线阅读,更多相关《分布式调度框架quartz(40页珍藏版)》请在金锄头文库上搜索。

1、分布式调度框架quartz1 .常见分布式调度框架的比照框架名称源码商推荐指数支持 集群支持分 布式优点缺点quartzOpenSymphonyJV与 spring 天然集成没有友好的管理界面,功能单 一,对于管理调用的任务比拟 困难xxl-job许雪里*Saturn唯品会*Elastic-Job当当网*TBSchedule淘宝网*代码陈旧,停止维护Itscronsun2 . Quartz 简介Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源工程,它可以与J2EE 与J2SE应用程序相结合也可以单独使用。Quartz可以用来创立简单或为运行十个,百个,

2、 甚至是好几万个Jobs这样复杂的程序。Jobs可以做成标准的Java组件或EJBs。Quartz的最 新版本为Quartz 。2. 1. Quartz运行环境Quartz可以嵌入到另一个独立的应用程序中: Quartz可以在应用程序服务器内被实例化,并且参与事务;Quartz可以作为一个独立的程序运行(其自己的JVM),可以通过RMI使用; Quartz可以被实例化,作为独立的工程集群(负载均衡或故障转移功能),用于job的执 行;2. 2. Quartz的设计模式 组件模式链式编程 Factory工厂模式Builder 模式2. 3.Quartz使用步骤如果你使用的是持久化的存储机制(Jo

3、bStore局部会讲到),在决定JobDataMap中存放什 么数据的时候需要小心,因为JobDataMap中存储的对象都会被序列化,因此很可能会导致类的版本 不一致的问题;Java的标准类型都很平安,如果你已经有了一个类的序列化后的实例,某个时候,别人修 改了该类的定义,此时你需要确保对类的修改没有破坏兼容性:更多细节,参考现实中的序歹U化问 题。另外,你也可以配置JDBC-JobStore和JobDataMap,使得map中仅允许存储基本类型 和String类型的数据,这样可以防止后续的序列化问题。在Job执行时,JobExecutionContext中的JobDataMap为我们提供了很

4、多的便利。它是 JobDetail中的JobDataMap和Trigger中的JobDataMap的并集,但是如果存在相同的数据,那么后者 会覆盖前者的值。Trigger中的值会覆盖JobDetail中的值:Scheduler scheduler = StdSchedulerFactory.getDeyauttScheduler();JobDataMap dataMap = new JobDataMap。;dataMap.put(username, wangmin);dataMap.put(age, 18);DobDetail jobDetail = OobBuilder.newJob(My3

5、ob.class).setJobData(dataMap).build();JobDataMap dataMap2 = new JobDataMap。;dataMap2.put(sex, man);dataMap2.put(username, wm);Trigger trigger = TriggerBuilder.newrrigger().using3obData(dataMap2).startNow().withSchedule(CronScheduleBuilder.cronScheduLe(0/10 * * * * ?) .build();scheduler.scheduleJob(j

6、obDetail, trigger);scheduler.start();Job 类:public class MyJob implements Job(Overridepublic void execute(JobExecutionContext context) throws JobExecutionException System.out.printin(=);JobDetail obDetail = context.getJobDetail();/JobDataMap dataMap = jobDetail.getJobDataMap();JobDataMap dataMap = co

7、ntext.getMerged3obDataMap();System.out.printIn(username = + dataMap.getString(username);System.out.printIn(age = + dataMap.getInt(age);System.out.println(sex = + dataM叩.getString(sex);System.out.printIn(Inside MyJob.execute 输出结果:JopDataMap的数据来自DobDetail和Trigger的并集;Trigger中的数据会覆盖DobDetail中的数据;usernam

8、e = wmage = 18 sex = man Inside MyJob.execute.你可以只创立一个job类,然后创立多个与该job关联的JobDetail实例,每一个实例都有自 己的属性集和JobDataMap,最后,将所有的实例都加到scheduler中。JobDataMap dataMapl = new JobDataMap();dataMapl.put(username, wangmin);dataMapl.put(age, 18);JobDataMap dataMap2 = new JobDataMapO;dataMap2.put(sex, man);dataMap2.put

9、(username, wm);Trigger trigger = TriggerBuilder.newTrfgger() .usingJobData(dataMap2) .usingDobData(dataMapl) .startNow() .withSchedule(CronScheduleBuilder.cronSc/)edute(0/10 * * * * ?) .build();输出结果:username = wmage = 18 sex = man Inside My Job. execute. .|JobExecutionContext当 scheduler 调用一个 Job 时会将

10、 JobExecutionContext 传递给 Job 的 execute。方法;Job能通过JobExecutionContext访问到Quartz运行时的环境及Job本身的明细数据;JobExecutionException最后,是关于Job.execute(.)方法的一些额外细节。execute方法中仅允许抛出一种类型的异 常(包括 RuntimeExceptions) , BP JobExecutionExceptiono 因此,你应该将 execute 方法中 的所有内容都放到一个try-catch”块中。你也应该花点时间看看JobExecutionException的 文档,因为

11、你的job可以使用该异常告诉scheduler,你希望如何来处理发生的异常。4. 2. Trigger 接 口详解Trigger接口常用方法介绍package org.quartz;import java.io.Serializable;import java.util parator;import java.util.Date;public interface Trigger extends Serializable, Cloneable, Comparable public static final long seriaLVersionUID = -3904243490805975570L

12、;public enum Triggerstate NONE, NORMAL, PAUSED, COMPLETE, ERROR, BLOCKED public enum CompletedExecutioninstruction NOOP, RE_EXECUTE_JOB, SET_TRIGGER_COMPLETE, DELETE_TRIGGERtSET_ALL_JOB_TRIGGERS_COMPLETE, SET_TRIGGER_ERROR, SET_ALL_JOB_ TRIGGERS_ERROR public Static final int MISFIRE_INSTRUCTION_SMAR

13、T_POLICY = 0;public static final int MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY = -1;public static final int DEFAULT_PRIORITY = 5;public TriggerKey getKeyO;public JobKey getJobKey();public String getDescription(); / 返回 trigger 的描述信息public String getCalendarName(); / 返回 trigger 关联的日历信息public DobDataMa

14、p get3obDataMap();public int getPriority(); / 默认值是 5public boolean mayFireAgain();public Date getStartTime(); /第一次开始被触发的时间public Date getEndTime(); /触发器终止触发的时间public Date get Next F i reT ime (); /返回卜一次计划触发触发器的时间,如果触发器不再触发, 那么返回nullpublic Date getPreviousFireTime(); / ;【I二次触发触发器的时间1(如果触发器尚未触发, 那么返回n

15、ullopublic Date getFireTimeAfter(Date afterTime);public Date getFinalFireTime();public int getMisfirelnstruction();public TriggerBuilder getTriggerBuilder();public ScheduleBuilder getScheduleBuilder();public boolean equals(Object other);public int compareTo(Trigger other);class TriggerTimeComparator implements Comparator, Serializable /.public int

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号