作业
用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来做这些事情。你可以用两者之中的任何一个,但哪个跟合适则取决于你的调度需要。
调度一个作业
让我们通过看一个例子来进入实际讨论。现假定你治理一个部门,无论何时候客户在它的FTP服务器上存储一个文件,都得用电子邮件通知它。我们的作业将用FTP登陆到远程服务器并下载所有找到的文件。然后,它将发送一封含有找到和下载的文件数量的电子邮件。这个作业很轻易就帮助人们整天从手工执行这个任务中解脱出来,甚至连晚上都无须考虑。我们可以设置作业循环不断地每60秒检查一次,而且工作在7×24模式下。这就是Quartz框架完全的用途。
首先创建一个Job类,将执行FTP和Email逻辑。下例展示了Quartz的Job类,它实现了org.quartz.Job接口。
例2.从FTP站点下载文件和发送email的Quartz作业
public class ScanFTPSiteJob implements Job {
private static Log logger = LogFactory.getLog(ScanFTPSiteJob.class);
/*
* Called the scheduler framework at the right time
*/ public void execute(JobExecutionContext context)
throws JobExecutionException {
JobDataMap jobDataMap = context.getJobDataMap();
try {
// Check the ftp site for files
File[] files = JobUtil.checkForFiles(jobDataMap);
JobUtil.sendEmail(jobDataMap, files);
} catch (Exception ex) {
throw new JobExecutionException(ex.getMessage());
}
}}
我们故意让ScanFTPSiteJob保持很简单。我们为这个例子创建了一个叫做JobUtil的实用类。它不是Quartz的组成部分,但对构建各种作业能重用的实用程序库来说是有意义的。我们可以轻易将那种代码组织进作业类中,quarts 调度器一样好用,因为我们一直在使用quarts,所以那些代码可继续重用。
JobUtil.checkForFiles() and JobUtil.sendEmail()方法使用的参数是Quartz创建的JobDataMap的实例。实例为每个作业的执行而创建,它是向作业类传递配置参数的方法。
这里并没有展示JobUtil的实现,但我们能用Jakarta上的Commons Net轻易地实现FTP和Email功能。
分享到:
相关推荐
Java框架介绍Quartz从入门到进阶的文档介绍
1. 下载Quartz框架:从Quartz官方网站下载Quartz框架的发布版本,并解压到本地目录。 2. 配置quartz.properties文件:创建一个quartz.properties文件的副本,并将其放入工程的classes目录中,以便类装载器找到它。 3...
Quartz定时器是一个开源的作业调度框架,专为J2SE和J2EE应用程序设计,完全用Java编写。它的核心优势在于提供强大的灵活性和简单性,使得开发者可以轻松创建简单的或复杂的任务调度。Quartz支持多种特性,如数据库...
### Java框架介绍: Quartz从入门到进阶 #### 一、Quartz简介 Quartz是一个完全由Java编写的开源作业调度框架,适用于多种Java应用程序环境,包括但不限于J2SE、Web应用以及J2EE应用服务器。它提供了一种简单而灵活...
从Java入门到成为一名专业的架构师,这个过程中涉及的学习内容非常广泛,包括但不限于以下几个关键领域: 1. **Java基础**: 学习Java语法,如类、对象、封装、继承、多态等概念,理解控制流程(条件语句、循环)、...
"Quartz入门与提高1.ppt"可能是一个幻灯片教程,涵盖了从基础到进阶的Quartz使用。"定时任务Test.rar"可能包含了一些测试用例或示例代码,有助于理解实际应用场景。"网站地址.txt"可能提供了更多资源链接,而"quartz...
3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时沟通。 5.期待你能在...
综上所述,"Butte-Java-Note编程文档"是一个全面的Java开发者学习资源,覆盖了从基础到进阶的广泛知识领域,对于想要提升Java技能的开发者来说,是一份非常宝贵的参考资料。通过阅读这份文档,开发者可以系统地提升...
【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流...
在第10章"急速入门-企业级定时任务Quartz核心概念"中,你会了解到如何创建Job、Trigger,以及如何配置Scheduler来执行这些任务。Quartz提供了丰富的API,可以定义触发任务的时间规则,如cron表达式,以及任务间的...
《Spring Boot深度学习指南——基于"spring-boot-study-master.zip"》 ..."spring-boot-study-master.zip"提供了丰富的示例,是学习Spring Boot的宝贵资源,无论是新手入门还是进阶提升,都能从中受益匪浅。
《spring2.0技术手册》是一本旨在帮助读者掌握Spring 2.0框架的使用和理解的书籍。...通过本书的学习,读者可以获得从基础到进阶的Spring框架使用经验,为成为一个合格的Java开发者打下坚实的基础。
Spring 程式 BeanFactory、 ApplicationContext Type 2 IoC、Type 3 IoC 属性参考 自动绑定 集合物件注入 Bean 的生命周期 Bean 进阶管理 理想上对于 Bean 来说,它不需要意识到 ...
这份“springboot学习入门提升笔记”应该包含了从基础到进阶的全方面学习内容,非常适合那些想要快速上手或者希望深化SpringBoot理解的开发者。 SpringBoot的核心特性包括自动配置、嵌入式Web服务器、起步依赖和...
1. **Spring Boot入门**:介绍Spring Boot的起源和核心特性,如何快速创建一个Spring Boot项目,理解起步依赖和自动配置的概念。 2. **Web开发**:深入讲解了Spring Boot对Web应用的支持,包括Thymeleaf模板引擎,...
Spring Boot 是一个基于 Spring 框架的快速开发工具,旨在简化初始搭建以及开发过程。它集成了大量的常用第三方库配置,如 JDBC、MongoDB、JPA、RabbitMQ、Quartz 等,让你可以“零配置”地运行你的应用。Spring ...
- JFinal的插件丰富,例如Shiro安全框架插件、Swagger API文档生成插件、Quartz定时任务插件等,可以帮助开发者快速实现特定功能。 7. **实际应用场景** - JFinal适用于中小型Web项目,尤其适合个人开发者或者小...
SpringBoot新手学习手册是针对Java...总之,SpringBoot新手学习手册涵盖了从基础到进阶的各个方面,是学习和实践SpringBoot的理想资源。通过阅读和实践,开发者可以快速掌握SpringBoot的核心概念和技术,提升开发效率。
此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。 目录 第1篇 概述 第1章 Spring概述 1.1 认识Spring 1.2 关于SpringSource 1.3 Spring带给我们什么 1.4 Spring体系结构 1.5 ...
此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。 目录 第1篇 概述 第1章 Spring概述 1.1 认识Spring 1.2 关于SpringSource 1.3 Spring带给我们什么 1.4 Spring体系结构 1.5 ...