您现在的位置:赛迪网>>技术应用>>JAVA频道>>J2EE

详细讲解Quartz如何从入门到精通 (3)
作者:David_w_johnson 发文时间:2005.11.22

 

 

 

 

 

 

 

 

Quartz调度器

Quartz框架的核心是调度器。调度器负责管理Quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。Quartz不仅仅是线程和线程管理。为确保可伸缩性,Quartz采用了基于多线程的架构。

启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。这就是Quartz怎样能并发运行多个作业的原理。Quartz依赖一套松耦合的线程池管理部件来管理线程环境。本文中,我们会多次提到线程池管理,但Quartz里面的每个对象是可配置的或者是可定制的。所以,例如,如果你想要插进自己线程池管理设施,我猜你一定能!

作业

用Quartz的行话讲,作业是一个执行任务的简单Java类。任务可以是任何Java代码。只需你实现org.quartz.Job接口并且在出现严重错误情况下抛出JobExecutionException异常即可。

Job接口包含唯一的一个方法execute(),作业从这里开始执行。一旦实现了Job接口和execute()方法,当Quartz确定该是作业运行的时候,它将调用你的作业。Execute()方法内就完全是你要做的事情。下面有一些你要在作业里面做事情的例子:

· 用JavaMail(或者用其他的像Commons Net一样的邮件框架)发送邮件

· 创建远程接口并且调用在EJB上的方法

· 获取Hibernate Session,查询和更新关系数据库里的数据

· 使用OSWorkflow并且从作业调用一个工作流

· 使用FTP和到处移动文件

· 调用Ant构建脚本开始预定构建

这种可能性是无穷的,正事这种无限可能性使得框架功能如此强大。Quartz给你提供了一个机制来建立具有不同粒度的、可重复的调度表,于是,你只需创建一个Java类,这个类被调用而执行任务。

作业管理和存储

作业一旦被调度,调度器需要记住并且跟踪作业和它们的执行次数。如果你的作业是30分钟后或每30秒调用,这不是很有用。事实上,作业执行需要非常准确和即时调用在被调度作业上的execute()方法。Quartz通过一个称之为作业存储(JobStore)的概念来做作业存储和管理。

有效作业存储

Quartz提供两种基本作业存储类型。第一种类型叫做RAMJobStore,它利用通常的内存来持久化调度程序信息。这种作业存储类型最容易配置、构造和运行。对许多应用来说,这种作业存储已经足够了。

然而,因为调度程序信息是存储在被分配给JVM的内存里面,所以,当应用程序停止运行时,所有调度信息将被丢失。如果你需要在重新启动之间持久化调度信息,则将需要第二种类型的作业存储。

第二种类型的作业存储实际上提供两种不同的实现,但两种实现一般都称为JDBC作业存储。两种JDBC作业存储都需要JDBC驱动程序和后台数据库来持久化调度程序信息。这两种类型的不同在于你是否想要控制数据库事务或这释放控制给应用服务器例如BEA's WebLogic或Jboss。(这类似于J2EE领域中,Bean管理的事务和和容器管理事务之间的区别)这两种JDBC作业存储是:

· JobStoreTX:当你想要控制事务或工作在非应用服务器环境中是使用

· JobStoreCMT:当你工作在应用服务器环境中和想要容器控制事务时使用。

JDBC作业存储为需要调度程序维护调度信息的用户而设计。

作业和触发器

Quartz设计者做了一个设计选择来从调度分离开作业。Quartz中的触发器用来告诉调度程序作业什么时候触发。框架提供了一把触发器类型,但两个最常用的是SimpleTrigger和CronTrigger。SimpleTrigger为需要简单打火调度而设计。

典型地,如果你需要在给定的时间和重复次数或者两次打火之间等待的秒数打火一个作业,那么SimpleTrigger适合你。另一方面,如果你有许多复杂的作业调度,那么或许需要CronTrigger。

CronTrigger是基于Calendar-like调度的。当你需要在除星期六和星期天外的每天上午10点半执行作业时,那么应该使用CronTrigger。正如它的名字所暗示的那样,CronTrigger是基于Unix克隆表达式的。

作为一个例子,下面的Quartz克隆表达式将在星期一到星期五的每天上午10点15分执行一个作业。

0 15 10 ? * MON-FRI

下面的表达式

0 15 10 ? * 6L 2002-2005

将在2002年到2005年的每个月的最后一个星期五上午10点15分执行作业。你不可能用SimpleTrigger来做这些事情。你可以用两者之中的任何一个,但哪个跟合适则取决于你的调度需要。


<<上一页 1 2 3 4 5 6 下一页>>




赛迪网IT博客,IT人的网上家园
评论】 【推荐】 【 】 【打印】 【关闭

·Linux专区· ·黑客攻防·

· 系统移民须知:Linux操作系统安装要点
· 新手看招:Linux操作系统的入门命令
· Linux操作系统下硬盘分区的最佳方案
· Red hat下搞定红外线/GPRS/WAP代理上网
· 新手看招:Linux操作系统的网关设置
· RedHat Enterprise AS4硬盘安装步骤
· 擦亮眼睛看微软安全:昨天,今天和明天
· 横刀立斩魔爪:有效防范DDos攻击手段
· 专家说法:信息安全仅有保护是不够的
· 高手讲道:老黑客雷蒙德谈计算机语言
· 黑客精神祭 挖掘神秘黑客背后的故事
· 网络安全产品大市场 防火墙成为主力军
·中国信息化· ·成功案例·

· 国礼新特色-金和软件成为中国首个软件国礼
· CIO:了解IT成本驱动因素 控制整体IT成本
· 商业银行:数据仓库该保存什么信息?
· 未来三年的信息化投入增长速度将逐渐放缓
· 粤港空气质量上网查阅便知 资料每天发布
· 香港与泛珠三角区域软件产业进一步协作

· 天有可测风云 陕西省气象局信息化建设故事
· 酒店信息化:金陵饭店通过协同采购降低成本
· 江淮汽车最终选择明基逐鹿供应链管理系统
· Power服务器支撑青啤实现数据大集中案例
· 华为3COM山东“金保工程”网络建设案例
· 东软助力沈阳建设劳动就业管理信息系统

您还可以阅读

· Jakarta Commons中隐藏的宝贝-第一部分
· 实例讲解J2EE中软件基础结构的瓶颈问题
· 如何来提高您的J2EE项目的质量
· 用Java实现自动在数据库表中生成ID号
· 只需3步把您的Java程序转换为Web服务

Java文萃

· 软件工程之需求分析-需求的获取
· 软件工程--需求开发过程概述
· 软件工程-需求分析的任务是什么
· 软件工程之需求分析的地位和意义
· J2EE Web开发基础-网站的设计与
· Java设计模式之虚拟代理模式
· 软件体系架构模式在J2EE中的应用
· 什么样的构架才能开发出最好的企
· JAVA编程中几个常见错误简析(下
· 仔细触摸Java编程中的“文档”和
· JAVA编程中几个常见错误简析(上
· 用JSF与BEEHIVE PAGE FLOW开发WE
· XML之 Darwin 信息类型化体系结
· 基于java的图片文件格式转换和线
· 观点与展望: 选择 SOA 的原因和

本周文章排行


内容字典

J2EE:Java 2 Enterprise Edition(JAVA2企业版),使用Java进行企业开发的一套扩展标准,必须基于J2SE,提供一个基于组件设计、 开发、集合、展开企业应用的途径……
企业级API:使用该API很容易创建大型的商务和数据库应用程序。这类应用程序可在某个组织机构内或通过互联网与其它应用程序共享多媒体数据。迄今为止Java企业级API家族中已有四个成员。
线程:程序的基本执行单位。一个进程可以有若干个线程在并发运行,其中每个线程都执行不同的任务,如等待某些事件的发生,完成程序继续执行前无需完成的耗时性工作等……