Quartz任务调度(一)

[align=center][size=x-large]Quartz任务调度[/size][/align]
[size=medium]  本文叙述如何使用Quartz框架进行任务调度,框架结构,Cron语法以及部分常用API的描述等。

[b]1 关于Quartz[/b]
  Quartz 是一个功能齐全的、开源的job时间调度系统,它是可以被结合的,或者伴随虚拟的任何J2EE或J2SE程序-从最小的独立的应用程序到最大的e-commerce系统被使用。Quartz可以用来创建简单或复杂的时间调度来执行十、百、千、甚至上万的jobs;获得的job被定义为一个标准的java组件或EJBs. 这个Quartz 时间调度包含很多企业类的特征,例如JTA事务和簇。
  本文档基于Quartz目前的最新版本quartz-1.6.0.jar来编写和测试的,主要讲述如何使用Quartz进行计划任务的简单调度以及如何编写cron,让Quartz执行高级的调度功能。

[b]2 Quartz快速入门[/b]
2.1 Quartz运行机制简介
  在使用Quartz进行任务调度时,主要用到三个对象:JobDetail(任务对象)、Trigger(触发器对象)、Scheduler(调度器对象)。在例子开始之前,我们需要对这三个对象有一个简要的了解。
  JobDetail任务对象:其一般构造函数需要name、group、class三个参数。Name为此任务在调度器中的名称,group为此任务在调度器中的组名,class为此任务所对应的任务类。此任务类需要继承Job类,并实现execute(JobExecutionContext context)方法,当调度器运行到这个任务时,将直接调用并执行指定类的execute(JobExecutionContext context)方法。
  Trigger触发器对象:Quartz中定义了两种Trigger(即:SimpleTrigger和CronTrigger),SimpleTrigger可以进行简单的调度规则配置,而CronTrigger支持复杂的调度规则配置。为了快速入门,在本例中,我们使用SimpleTrigger来进行调度配置。CronTrigger的配置语法及规则将在后面的章节中加以介绍。
  Scheduler调度器对象:由调度器工厂SchedulerFactory生成,我们使用它来将JobDetail和Trigger注册到一起,从而使JobDetail按Trigger定制的规则运行。
  总之,JobDetail定制任务,Trigger定制规则,Scheduler是容器,将二者注册到一起,以达到任务调度的目的。
2.2 HelloWorld例子
2.2.1 业务描述
  下面就让我们一起来做一个HelloWorld的例子吧,我们将定义一个HelloJob的类作为我们的Job类,HelloWorld则是我们的main类,并定义从当前时间开始每2秒执行一次HelloJob,执行一百次后结束任务。具体程序如下:
2.2.2 编码实现

HelloJob.java[/size]

package com.newland.quartz.sample1;

import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

/**
* Job类,实现输出Hello-当前时间
*
* @author Chen.Feng(Kevin)<br>
* mail:chenfengcn@yeah.net<br>
* qq:67758633
*
*/
public class HelloJob implements Job {
public void execute(JobExecutionContext context)
throws JobExecutionException {
// 输出Hello World-当前时间
System.out.println("Hello World! - " + new Date());
}
}


[size=medium]HelloWorld.java[/size]

package com.newland.quartz.sample1;

import java.util.Date;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleTrigger;
import org.quartz.impl.StdSchedulerFactory;
/**
* 使用Quartz设置每两秒执行一次HelloJob,共执行一百次
*
* @author Chen.Feng(Kevin)<br>
* mail:chenfengcn@yeah.net<br>
* qq:67758633
*
*/
public class HelloWorld {
public static void main(String[] args) {
try {
//通过SchedulerFactory获取一个调度器实例
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler sched = sf.getScheduler();
//创建一个JobDetail实现,并指定此JobDetail的任务类
JobDetail job = new JobDetail("job1", "group1", HelloJob.class);
//通过SimpleTrigger定义调度规则:马上启动,每2秒运行一次,共运行100次
SimpleTrigger trigger = new SimpleTrigger("trigger1", "group1");
trigger.setStartTime(new Date());
trigger.setRepeatInterval(2000);
trigger.setRepeatCount(100);
//注册调度规则SimpleTrigger与JobDetail绑定关系
sched.scheduleJob(job, trigger);
//启动调度
sched.start();
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

[size=medium]  注:在程序运行之前,需要将Quartz所需要使用到的包加入到相应的工程位置中去。主要包括以下几个包。

[img]/upload/attachment/88851/807de12b-d23e-3665-9918-113e509ccf85.jpg[/img]
  如以上所述,运行main函数后,程序将会在后台打印出如:
Hello World! - Thu Jul 31 15:41:21 CST 2008
Hello World! - Thu Jul 31 15:41:23 CST 2008
的字样即调度执行成功。[/size]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值