由于目前的工作内容为建行CLPM批处理业务的设计工作,所以很好的理解批处理所用的任务调度框架Quartz势在必行;为了能够更好的去服务于工作,也为了提升自己,所以我学习了Quartz Job Scheduling Framework 中文版 V0.9.2.chm这一资料,并对其中的学习内容做了一些笔记;
用该书作者的话一样,自己在去用语言表达的过程中,在为了更好的让读者明白的心理作用下,编写者会要求自己对所编写的内容达到非常熟悉的地步,这样可以很好的迫使自己更好的掌握所学的内容,所以我准备发表我的学习笔记,也希望对Quartz有兴趣的朋友一起来进行讨论,共同学习;很多内容都是从资料上截取下来的,所以我起到的作用也只是一个组织的作用;
企业应用中的作业调度
1. 什么是作业?
“作业”,这一技术述语上的概念,又让我们回到了大型机的年代,那时候,用户/程序员提交一叠穿孔卡片或者纸带
(上面描述了一个作业)给操作人员,由操作人员帮忙执行那些作业。用户等待作业执行完后,回到主机那边取自己的卡片和打印出来的输出结果。
2.什么是作业调度?
“作业调度”通常是指运行一个批量的作业或称之谓批处理。这种批处理作业一般都是放在后台运行并且不需要与用户交互。现在,显著增多的多样性的任务已代替了早先的批量作业。在一个大的组织中每天的每小时跑上百个作业已属普遍。并且作业的规模与复杂性仍在持续的上扬,因此批量作业和作业调度器也就随需应生。它的作用就是很好的替我们管理每天所要执行的作业任务;
3.作业调度为什么说是重要的?
随着业务流程复杂性的提升,自动化流程也更能显现出它的有益之处来。人之所以称之为人,因为我们犯错误的频度远高于电脑。把一系列任务自动安置到一个作业中,然后再为这个作业创建一个调度器,到时这个作业就会自动执行了。相对于人的手工处理,我们可以减少大多数的出错机会。作业调度器的另一个优点体现在伸缩性。我们也许能一个小时中手工完成10或20个作业,但是随着每小时处理作业数量的增加,我们就更难杜绝不在作业中引入错误。但如果借助于作业调度,那么就大大的减少了出现错误的机会,也不用像以前一样,需要人来陪同任务的执行了;
4.什么是企业应用中的作业调度?
“企业应用”一词,如今经常会被我们无意识间提及,然而似乎现在还没有对它一个准确的定义。但对于在本书中这一词的意义,我们只要建立起这样一个概念:作为某一组织的一部份而存在的软件系统或程序。这个系统可以是一个大型机上的、或者是一个C/S结构的、或者就是一个J2EE应用。真实世界中的例子就是,作业调度器能在那个系统上大量的使用。
以下的几个场景,尽管没有详尽的进行描绘,也涉及到了现今应用软件常常遇到的场景。
场景 #1: 邮件提醒和告警
许多网站(不管是商业的还是别的)允许用户提供用户名和密码注册一个帐户。出于安全考虑,一个好的做法是让用户密码每隔一段时间过期失效,比如说90天的周期。这种情况下,你可以创建一个作业,让它每天午夜运行一次,并且向过期时间不到三天的所有用户发邮件提醒。这里可以恰到好处的用到作业调度器;
场景 #2: 执行文件传输操作
许多商家需要和他们的供应商或客户作信息集成。一种集成的方式就是进行数据文件的交换。可以采用实时的方式,例如SOAP协议,但是许多时候却不需要实时性,代之以异步的方式,譬如用FTP协议来发出或取所要的文件。
一个劳工补偿局每天早上收到一些包含患者及事故信息的文件。公司可以雇一个人每天早上手工的检出FTP服务器上的文件。作为另一个更好的选择就是可以写一个作业,让它每天早上扫描FTP服务器,如果有文件的话,把文件内容处理后插入到患者数据库中去。让作业调度器代劳后,这个职员再也不用手工去上FTP检查文件,而可以为公司做更多别的更有意义的事情。
5. 作业调度与工作流
任务调度不等于工作流;但他们却有着不一般的关系;
作业调度不是工作流,理解这一点很重的要。它们常被同时应用于一个方案中,但它们是两个截然不同的解决办法,并且都可孤立使用。一个作业通常由几个步骤组成。我们回过头来看前面提到的那个密码过期的作业,实质上它是由三个步骤所组成。
a. 获取到密码将要过期的用户列表
b. 为列表中的用户各自发送一个邮件
c. 更新记录,下次就能知道哪些邮件发送过
这个作业可以使用工作流的优点,作业的每一部份恰好对应着工作流的每一个步骤。这并非意味着离开了工作流,作业调度会有些糟。这是普通的下一步、下一步简单操作。只要作业调度框架与第三方工作流能轻便的解决问题,就是好的。讲解;
6.Quartz它出现的背景
和现今许多在用的开源项目一样,Quartz之初也只是为个人开发者提供了一个简单的实现方案。但是随着日益增多的关键人员的积极参与和慷慨的贡献,Quartz 已经成为了一个为众人所知,并且能帮助人们解决更大问题的框架。
Quartz 项目 是由 James House 创立的,它在1998年就有该框架最初的构思。包括作业队列的概念,使用线程池来处理作业,也许它最早的模型已不为现今的Quartz使用者所知了。
在接下来的数年中,House 自己说他一直在关注着同一个需求:需要一个灵活的作业调度工具。他在找寻便宜且具有丰富特征的Java作业调度工具时,让他面临着以下几个选择:
·一个昂贵的商业化工具
·嵌入在大框架之中的,根本用不着这么一个大框架
·类似 Unix Cron 或者 Windows 的计划任务
·自己亲自定制的方案
House 有限的选择和在这个问题上的兴趣促成了他为作业调度器创建一个开源的项目。在2001年春天,他在 SourceForge 上创立了该项目,
这一网址 http://sourceforge.net/projects/quartz 现在还是有效的,只是已经不再维护了。
自从 Quartz 的雏形一出来,众多的捐助者和开发人员加入到这个项目中来。然而应该说,Quartz 能象今天这么存在还是要感谢 House 以及他在作业调度领域中的兴趣。
在众多人眼中,他那解决问题的决心很值得称颂的。